2017-07-21 8 views
0

関連することなく、パッケージから、実行時にMavenの成果物のバージョンを取得します。Get Maven artifact version at runtimeJavaクラス

getPackage()に依存しているリンク、質問、対照的な - パッケージ内のクラスのメソッドを、どのように同じ結果がパッケージのために達成することができますJavaクラスは含まれていませんが、Webリソースを持つサポートライブラリだけですか?ここでは第二の答えで見つかっ方法使用

+1

この場合も、MANIFEST.MFとpom.propertiesの違いによって異なります。どちらを保持していても、クラスパスからそれらを読んで見てください。 –

+0

MANIFEST.MFの読み方についてもっと調べてみると(うまくいけば、.jarにすでにパッケージ化されています)、私の問題の正しい検索クエリを見つけて、下の解決策に終わりました。 – korgmatose

答えて

0

reading MANIFEST.MF file from jar file using JAVA をしてAttributesに条件付きを追加 - MANIFEST.MFに提示されるタイトルをチェックするには、適切なバージョンを返します。

public static String getManifestInfo() { 
     Enumeration resEnum; 
     try { 
      resEnum = Thread.currentThread().getContextClassLoader().getResources(JarFile.MANIFEST_NAME); 
      while (resEnum.hasMoreElements()) { 
       try { 
        URL url = (URL)resEnum.nextElement(); 
        InputStream is = url.openStream(); 
        if (is != null) { 
         Manifest manifest = new Manifest(is); 
         Attributes mainAttribs = manifest.getMainAttributes(); 
         String version = mainAttribs.getValue("Implementation-Version"); 
         String name = mainAttribs.getValue("Implementation-Title"); 
         if (version != null && name != null) { 
          if ("packagetitle".equals(name)) 
           return version; 
         } 
        } 
       } 
       catch (Exception e) { 
        // Silently ignore wrong manifests on classpath? 
       } 
      } 
     } catch (IOException e1) { 
      // Silently ignore wrong manifests on classpath? 
     } 
     return null; 
    } 

これは確かにパッケージ自体についての詳細を知っている場合は、ストリームを()を使用して反復をスキップすることにより、より効果的に行うことができますが、意図したとおり、少なくとも、これは動作します。