2013-04-15 30 views
3

我在我的項目中有兩個版本。鏈接POM版本和應用程序版本

  1. 在我的pom.xml的版本時,該項目被包裝所使用等
  2. 我已經把恆定在我的代碼版本,所以我可以當我登錄在運行時使用它,等

這些當然應該是一樣的,但有時我忘了改變其中一個。

是否有一種很好的方式來定義這個版本只有一次,並讓它在運行時使用maven和代碼?

回答

2

當您使用Maven打包應用程序時,Maven將生成一個目錄META-INF/maven/<groupId>/<artifactId>/pom.properties。該文件根據POM包含項目的版本,並且您可以在運行時從JAR文件加載該文件以讀取您的版本號。

唯一的一點是,這個文件確實存在於打包的項目(不管是JAR,WAR還是EAR)中的只有。您可能希望爲從工作臺運行代碼時編寫一些回退機制。

1

這是我通常在使用pom文件中指定的版本時使用的一些代碼。

private final static String GROUP_ID = "my.group"; 
private final static String ARTIFACT_ID = "my-artifact"; 

private String getVersion() { 
    String propFileName = "META-INF/maven/" + GROUP_ID + "/" + ARTIFACT_ID + "/pom.properties"; 
    Properties properties = new Properties(); 
    String version = "n/a"; 

    try { 
     InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(propFileName); 

     if (inStream != null) { 
      properties.load(inStream); 
      version = properties.getProperty("version", "n/a"); 
     } 
    } catch (IOException e) { } 
    return version; 
} 

而作爲mthmulders在他回答說,該文件以封裝項目確實只存在(在最後的戰爭/罐/任何,而不是在工作目錄)。

+1

我對你的回覆maba添加了一個簡短的評論,導致我的一個同事錯過了它!這兩種情況都很好的解釋。 –