【问题标题】:Java: How to access metafile information from maven failsafe plugin?Java:如何从 Maven 故障安全插件访问元文件信息?
【发布时间】:2020-11-16 11:45:24
【问题描述】:

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

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

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

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

this.getClass().getPackage().getImplementationVersion()

从 jar 中的 META-INF/MANIFEST.MF 读取 这看起来像

Name: eu/simuline/octave/
Extension-name: eu.simuline.octave
Specification-Version: 0.7
Implementation-Version: 0.7-SNAPSHOT

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

如何在 maven 测试中包含元信息???

【问题讨论】:

  • 你需要访问target目录下生成的jar文件……唯一的办法……如果你真的需要测试……究竟是什么?
  • 你是对的。我必须访问它。我认为应该是类加载器来访问它。我认为 Package.getImplementationVersion() 除了依赖 lcassloader 什么都不做。因为所有的信息都在罐子里的 MANIFEST.MF 中。所以我认为不需要访问自己,对吧?
  • @hkmarbaise:我想检查我通过清单传递给用户的元信息片段是否真的如想要的那样并且真的存在。例如,我想传递某些版本以及为用户量身定制的其他信息。
  • 接下来的问题是:你真正在测试什么?如何将元信息配置到 MANIFEST.MF 文件中?通过 Maven?
  • @khmarbaise,是的,但这对解决方案没有帮助,是吗?重要的是罐子的外观。

标签: java maven maven-failsafe-plugin


【解决方案1】:

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

mvn -X verify

揭幕

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-15
    • 2018-04-13
    • 2012-09-15
    • 2014-04-03
    • 2019-09-25
    • 2013-11-12
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多