Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 从公共库代码中的Maven pom.properties中发现WAR的一个版本_Java_Maven_War - Fatal编程技术网

Java 从公共库代码中的Maven pom.properties中发现WAR的一个版本

Java 从公共库代码中的Maven pom.properties中发现WAR的一个版本,java,maven,war,Java,Maven,War,我有一个共享库来减少代码重复。因此,它不知道它所属的web应用程序的组或工件名称,但我想提供一种方法来访问当前WAR的名称和版本,如下所示 someCommonService.getAppDescriptor(); //returns "com.my.group:my-artefact" someCommonService.getVersion(); //returns "1.2.3-SNAPSHOT" 下面是我试过的 Jetty和Tomcat(以及大多数其他web容器)都允许读取资源 /ME

我有一个共享库来减少代码重复。因此,它不知道它所属的web应用程序的组或工件名称,但我想提供一种方法来访问当前WAR的名称和版本,如下所示

someCommonService.getAppDescriptor(); //returns "com.my.group:my-artefact"
someCommonService.getVersion(); //returns "1.2.3-SNAPSHOT"
下面是我试过的

Jetty和Tomcat(以及大多数其他web容器)都允许读取资源

/META-INF/maven/com.my.group/my artifact/pom.properties

包含所需信息的。相关生态系统中的所有WAR文件都有此文件

但是您需要事先了解组和工件,这是在这样一个公共库中指定使用的额外障碍/步骤

通过此枚举,可以从技术上“发现”正确的根:

枚举en=getClass().getClassLoader().getResources(“META-INF”)

并用
.jar消除一切在路径上。但是如何发现组和工件(即列出子目录?)

也许有更好的方法实现同样的目标(不改变应用程序的项目POM或构建步骤)

更新
唯一可行的解决方案是使用实现和规范条目使Maven Archiver更新清单。它有缺点(主要是POM膨胀),不能回答这个问题。看起来要么是Java资源加载API要么是Maven在这里失手了

也许这会有所帮助:@khmarbaise这是一个很好的总结,谢谢!这些方法都不能回答这个问题(使库可靠地发现组、工件和版本),但它有助于找到一些临时解决方案。如果库本身提供这些信息,它必须提供一个Java类/接口,您可以通过使用templates maven插件来实现这些信息。