我在我的項目中有兩個版本。鏈接POM版本和應用程序版本
- 在我的pom.xml的版本時,該項目被包裝所使用等
- 我已經把恆定在我的代碼版本,所以我可以當我登錄在運行時使用它,等
這些當然應該是一樣的,但有時我忘了改變其中一個。
是否有一種很好的方式來定義這個版本只有一次,並讓它在運行時使用maven和代碼?
我在我的項目中有兩個版本。鏈接POM版本和應用程序版本
這些當然應該是一樣的,但有時我忘了改變其中一個。
是否有一種很好的方式來定義這個版本只有一次,並讓它在運行時使用maven和代碼?
http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html
看一看這個,你應該有一個屬性文件,它具有一定的屬性,它指的是版本號。使用過濾,您可以在maven工件和應用程序中設置相同的版本。
當您使用Maven打包應用程序時,Maven將生成一個目錄META-INF/maven/<groupId>/<artifactId>/pom.properties
。該文件根據POM包含項目的版本,並且您可以在運行時從JAR文件加載該文件以讀取您的版本號。
唯一的一點是,這個文件確實存在於打包的項目(不管是JAR,WAR還是EAR)中的只有。您可能希望爲從工作臺運行代碼時編寫一些回退機制。
這是我通常在使用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在他回答說,該文件以封裝項目確實只存在(在最後的戰爭/罐/任何,而不是在工作目錄)。
我對你的回覆maba添加了一個簡短的評論,導致我的一個同事錯過了它!這兩種情況都很好的解釋。 –