Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 链接POM版本和应用程序版本_Java_Maven_Version - Fatal编程技术网

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

Java 链接POM版本和应用程序版本,java,maven,version,Java,Maven,Version,我的项目中有两个版本 项目打包时使用的my POM.xml中的版本,等等 我在代码中加入常量的版本,以便在运行时登录时使用它,等等 这些当然应该是相同的,但有时我忘了改变其中一个 有没有一种好方法可以只定义这个版本一次,并让maven和代码在运行时都使用它 看看这个,你应该有一个属性文件,它有一个特定的属性,它引用了版本号。使用过滤,您可以在maven工件和应用程序中设置相同的版本。当您使用maven打包应用程序时,maven将生成一个目录META-INF/maven///pom.proper

我的项目中有两个版本

  • 项目打包时使用的my POM.xml中的版本,等等
  • 我在代码中加入常量的版本,以便在运行时登录时使用它,等等
  • 这些当然应该是相同的,但有时我忘了改变其中一个

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


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

    当您使用maven打包应用程序时,maven将生成一个目录
    META-INF/maven///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在他的回答中所说,这个文件只存在于打包的项目中(在最终的war/jar/any中,不在工作目录中)。

    我对你的精彩回复maba添加了一个简短的评论,因为我的一个同事错过了它!这两种情况都有很好的解释。