链接POM版本和应用程序版本

时间:2013-04-15 11:14:53

标签: java maven version

我的项目中有两个版本。

  1. 打包项目时使用的POM.xml中的版本
  2. 我在代码中放入一个常量的版本,所以我可以在运行时使用它来记录等等。
  3. 这些当然应该是相同的,但有时我会忘记改变其中一种。

    有没有一种很好的方法来定义这个版本只有一次并在运行时由maven和代码使用它?

3 个答案:

答案 0 :(得分:4)

http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html

看看这个,你应该有一个属性文件,它有一个引用版本号的特定属性。使用过滤,您可以在maven工件和应用程序中设置相同的版本。

答案 1 :(得分:2)

使用Maven打包应用程序时,Maven将生成一个目录META-INF/maven/<groupId>/<artifactId>/pom.properties。该文件包含根据POM的项目版本,您可以在运行时从JAR文件加载该文件以读取您的版本号。

唯一的问题是,此文件仅在存在于打包的项目中(无论是JAR,WAR还是EAR)。您可能希望在从工作台运行代码时编写一些回退机制。

答案 2 :(得分: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在他的回答中所说, 这个文件只存在于打包的项目中 (在最终的war / jar / any中,不在工作目录中)

相关问题