Zum Inhalt

MANIFEST.MF auslesen

Die erste Methode getManifestProperties() liest die MANIFEST.MF aus dem „direkten“ Klassenpfad aus und denkt z.B. folgenden Fall ab: „java -jar deine.jar“. Die MANIFEST Datei befindet sich dann in der deine.jar.

Die zweite Methode getManifestPropertiesFromPackingJar()greift den Fall auf, wenn die gesuchte MANIFEST.MF sich in einer Jar befindet, die wiederrum in einem Container enthalten ist, z.B. in einer WAR-Datei.

Code:

	
private static final String MANIFEST_MF = "META-INF/MANIFEST.MF";

	/**
	 * @return a set of manifest properties
	 * @throws IOException
	 */
	Properties _getManifestProperties() throws IOException {
		URLClassLoader urlClassLoader = (URLClassLoader) Thread.currentThread().getContextClassLoader();
		URL manifestUrl = urlClassLoader.findResource(MANIFEST_MF);
		InputStream is = manifestUrl.openStream();
		Properties props = new Properties();
		props.load(is);

		is.close();
		return props;
	}

	/**
	 *
	 * @return manifest properties from the jar file that contains this class.
	 * @throws IOException
	 */
	Properties getManifestPropertiesFromPackingJar() throws Exception {
		CodeSource src = this.getClass().getProtectionDomain().getCodeSource();

		URL jar = src.getLocation();
		if (!jar.toString().endsWith(".jar")) {
			return _getManifestProperties();
		} else {
			// todo: trim uri for possible trailing blanks!
			URI jarURI = URI.create("jar:" + jar.toString());
			Map<String, String> env = new HashMap<>();
			env.put("create", "true");

			try(FileSystem fileSystem = FileSystems.newFileSystem(jarURI, env)) {
				Reader propertiesReader = Files.newBufferedReader(fileSystem.getPath(MANIFEST_MF));
				Properties result = new Properties();
				result.load(propertiesReader);
				return result;
			}
		}
	}
Published inJavaProgrammieren

Schreibe den ersten Kommentar

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.