3

我的项目中有两个版本。

  1. 打包项目时使用的我的 POM.xml 中的版本等。
  2. 我在代码中放入常量的版本,因此我可以在运行时使用它,当我登录等时。

这些当然应该是相同的,但有时我会忘记更改其中一个。

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

4

3 回答 3

4

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

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

于 2013-04-15T11:21:27.257 回答
2

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

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

于 2013-04-15T11:22:08.870 回答
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 中,而不是在工作目录中)。

于 2013-04-15T11:30:15.710 回答