private
static
final String MANIFEST_DIRECTORY_LOCATION =
"META-INF" + File.separator +
"MANIFEST.MF";
private
static
final String MANIFEST_ENTRY =
"META-INF/MANIFEST.MF";
/**
* Creates a {@link Reader} for the manifest in the supplied exploded JAR directory.
*
* @param directory the exploded JAR directory.
* @return the <code>Reader</code> or <code>null</code> if the manifest cannot be found.
*/
if (directory ==
null || !directory.isDirectory()) {
throw
new IllegalArgumentException(
"Must supply a valid directory");
}
try {
File manifestFile =
new File(directory.getAbsolutePath() + File.separator + MANIFEST_DIRECTORY_LOCATION);
if (manifestFile.exists()) {
return
new FileReader(manifestFile);
}
else {
return
null;
}
}
catch (IOException e) {
throw
new RuntimeException(
"Unable to read MANIFEST for exploded directory '" + directory.getAbsolutePath() +
"'.", e);
}
}
/**
* Creates a {@link Reader} for the manifest in the supplied JAR file.
*
* @param file the JAR file.
* @return the <code>Reader</code> or <code>null</code> if the manifest cannot be found.
*/
JarFile jar =
null;
try {
jar =
new JarFile(file);
JarEntry entry = jar.getJarEntry(MANIFEST_ENTRY);
if (entry !=
null) {
StringWriter writer =
new StringWriter();
FileCopyUtils.copy(
new InputStreamReader(jar.getInputStream(entry)), writer);
jar.close();
return
new StringReader(writer.toString());
}
else {
return
null;
}
}
catch (Exception e) {
throw
new RuntimeException(
"Cannot read MANIFEST.MF from jar '" + file.getAbsolutePath() +
"'.", e);
}
finally {
if (jar !=
null) {
try {
jar.close();
}
catch (IOException ioe) {
throw
new RuntimeException(
"Failed to close jar '" + file.getAbsolutePath() +
"'.", ioe);
}
}
}
}
}