获取当前jar文件的名称

时间:2017-05-25 13:03:02

标签: java jar manifest

我有这个代码在dev-environment上返回信息。 但是,当我从罐子里跑出来时,代码并没有遵循它应该如何。

jar的名称是硬编码的,并希望得到它的名称,因为版本各不相同。

private static String getManifestUrlForClass(Class<?> cl) throws URISyntaxException, IOException {

        URL url = cl.getResource(cl.getSimpleName() + ".class");
        String s = url.toString();

        System.out.println("URL Path: " + url.getPath());
        System.out.println("URL File: " + url.getFile());

        String path = MYCLASS.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String revisionNumber = "";
        String decodedPath = "";

        JarFile jarfile = null;


         try {
        decodedPath = URLDecoder.decode(path, "UTF-8").replace("classes", "");

         try {
        jarfile = new JarFile(decodedPath + "MYJAR-ver.si.on.jar"); 
         } catch (IOException e1) {

         System.out.println("or Path to file cannot decode...");
         e1.printStackTrace();
         }

        Manifest manifestFromJar = jarfile.getManifest(); //

        System.out.println("Manifest from " + jarfile.getName().toString() + " = "
                + manifestFromJar.getMainAttributes().getValue("Revision-Number").toString()); 

        revisionNumber = manifestFromJar.getMainAttributes().getValue("Revision-Number").toString();
        } catch (IOException e) {
         System.out.println(url.getFile().toString() + "is not jar");// TODO Auto-generated catch block
         System.out.println("or Path to file cannot decode...");
         e.printStackTrace();
         }

        return revisionNumber;

    }

MYJAR将始终与| ver.si.on |相同最有可能的变化和硬编码名称不是最佳做法。

我想做什么? 1.获取MYJAR-ver.si.on.jar的位置,无论它位于何处 2.使用该位置访问它的Manifest 3.使用清单提取修订号 4.在ui中显示修订号

我还不熟悉java并且不太了解它。我已经阅读了有关使用&#34; rsrc:&#34;到达jar,或类似于https://stackoverflow.com/a/40680501/6756124的东西。

0 个答案:

没有答案