2012-01-06 97 views
9

如何以編程方式獲取項目的Maven版本?以編程方式獲取項目的Maven版本

換句話說:

static public String getVersion() 
{ 
    ...what goes here?... 
} 

例如,如果我的項目將產生的jar CalculatorApp-1.2.3.jar,我想getVersion()返回1.2.3

+1

你的意思是在一個插件,或在應用程序本身? – 2012-01-06 21:09:48

+0

你打算如何使用maven版本?如果需要在構建過程中將信息包含在某個文件中,則可以使用[build-helper-maven-plugin](http://mojo.codehaus.org/build-helper-maven-plugin/maven -version-mojo.html),它會給你的Maven版本。 – CoolBeans 2012-01-06 21:11:37

+0

我可能誤解了你的問題。如果你想獲得你的項目的版本(不是像我之前的評論那樣的maven版本),那麼請看一看[這裏](http://blog.nigelsim.org/2011/08/31/programmatically-getting-the -maven版本 - 的 - 你的項目/)。 – CoolBeans 2012-01-06 21:13:02

回答

16

src/main/resources使用以下內容創建文件version.prop

version=${project.version} 

以下內容添加到你項目的POM:

<build> 
... 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/version.prop</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/version.prop</exclude> 
      </excludes> 
     </resource> 
    </resources> 
... 
</build> 

添加以下方法:

public String getVersion() 
{ 
    String path = "/version.prop"; 
    InputStream stream = getClass().class.getResourceAsStream(path); 
    if (stream == null) 
     return "UNKNOWN"; 
    Properties props = new Properties(); 
    try { 
     props.load(stream); 
     stream.close(); 
     return (String) props.get("version"); 
    } catch (IOException e) { 
     return "UNKNOWN"; 
    } 
} 

附:在這裏找到這個解決方案的大部分:http://blog.nigelsim.org/2011/08/31/programmatically-getting-the-maven-version-of-your-project/#comment-124

+0

爲什麼第二個資源定義的過濾設置爲false? – demaniak 2015-05-29 13:08:58

+0

@demaniak第一個副本只是version.properties並對其進行過濾,第二個副本只是version.properties的副本,並且不進行過濾。 – pauli 2015-12-04 14:31:21

相關問題