Задача: получить доступ к файлу /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-нике. Например: