Java:如何从 maven 故障安全插件访问元文件信息?

use*_*605 6 java maven maven-failsafe-plugin

我想访问存储在 jar 文件中的实现版本等信息。这似乎工作得很好,在任何技术中,但总是基于类加载器。

如果我想在我的 maven 环境中测试,当然我不能使用 surefire 插件,因为这是在 jar 中打包之前。因此我必须使用故障安全插件。

但是这两种技术都不起作用,很可能是因为一些关于类加载器的黑魔法。

获取实现版本的最简单方法就是

this.getClass().getPackage().getImplementationVersion()
Run Code Online (Sandbox Code Playgroud)

它从META-INF/MANIFEST.MF看起来像的罐子里读取

Name: eu/simuline/octave/
Extension-name: eu.simuline.octave
Specification-Version: 0.7
Implementation-Version: 0.7-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

也许不需要扩展,需要的是部分名称,它以一种明显的方式从包名称派生出来(尾部斜杠似乎很重要;-))。但如前所述,这仅适用于生产环境,不适用于带有故障安全插件的测试。然后java代码返回0.7-SNAPSHOT,否则它只是返回null,这意味着根据api文档,版本未知......好吧。

我该怎么做才能在 maven 测试中包含元信息???

use*_*605 2

我对故障安全插件做了一些研究。例如运行

mvn -X verify
Run Code Online (Sandbox Code Playgroud)

揭幕

INFO] --- maven-failsafe-plugin:3.0.0-M5:verify (run-tests) @ javaoctave ---
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M5:verify from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M5, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@277050dc]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M5:verify' with basic configurator -->
[DEBUG]   (s) basedir = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave
[DEBUG]   (s) reportsDirectory = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/failsafe-reports
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@1416a80a
[DEBUG]   (s) skip = false
[DEBUG]   (f) summaryFile = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/failsafe-reports/failsafe-summary.xml
[DEBUG]   (s) testClassesDirectory = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/test-classes
[DEBUG]   (s) testFailureIgnore = false
[DEBUG] -- end configuration --
[DEBUG] Failsafe report directory: /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/failsafe-reports
Run Code Online (Sandbox Code Playgroud)

请注意testClassesDirectory. 我认为该插件访问在前面的生命周期阶段包中创建的 jar
,但显然这是不正确的,并且似乎没有办法这样做。因此所有的东西都不起作用。

我提交了一个功能/增强请求来解决这个问题。

不知道他们是否喜欢我的想法。