Accessing MANIFEST.MF

Задача: получить доступ к файлу /META-INF/MANIFEST.MF внутри конкретного jar-файла.

Суть проблемы в том, что getResource("/META-INF/MANIFEST.MF") вернёт первый попавшийся файл, найденный в class path.

Решение:

public static Manifest getManifestByResource(String name) {
   String pathToFile = Version.class.getResource(name).toString();
   String pathToManifest = pathToFile.substring(
       0,
       pathToFile.length() - name.length()
   ) + "/META-INF/MANIFEST.MF";
   Manifest manifest;
   try {
       manifest = new Manifest(new URL(pathToManifest).openStream());
   } catch (IOException e) {
       return null;
   }
   return manifest;
}

В качестве name можем передать любой ресурс-маркер, находящийся в требуемом jar-нике. Например:

String className = this.getClass().getSimpleName();
String classFileName = className + ".class";
Manifest manifest = getManifestByResource(classFileName);