我正在尝试在多模块项目的子模块中运行'mvn clean install'。该项目是Jacoco,但我认为这不是一个问题,我不理解Maven在这里的使用方式,而不是Jacoco本身的问题。
https://github.com/jacoco/jacoco/blob/master/jacoco-maven-plugin.test/it/it-site/pom.xml
我收到以下错误:
[ERROR]插件@ project.groupId @:jacoco-maven-plugin:@ project.version @ 或其中一个依赖项无法解决:无法读取 工件描述符 @ project.groupId @:jacoco-行家-插件:罐子:@ project.version @
我在pom中看到以下内容:
<groupId>@project.groupId@</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
我不熟悉在@project.groupId@
中使用@符号,虽然我认为它在某种程度上应该在运行时被替换。
我可以从顶级pom运行Maven,我甚至在日志中看到[INFO] Building: it-site/pom.xml
但是没有在那里创建目标目录。
赞赏正确的方向。
答案 0 :(得分:3)
这可能与pom文件有关:https://github.com/jacoco/jacoco/blob/master/jacoco-maven-plugin.test/pom.xml
它正在使用名为maven invoker的插件。
Invoker插件用于运行一组Maven项目。插件可以确定每个项目执行是否成功,并且可以选择验证从给定项目执行生成的输出。
如果您阅读了有关使用此插件过滤文件的内容,it mentions:
包含/排除模式选择的POM文件。要过滤的标记必须用@ ... @括起来,以避免干扰Maven的普通POM插值,即使用@project.version @而不是$ {project.version}。
答案 1 :(得分:0)
关于为何在这里使用Invoker插件和过滤......
Spring Boot documentation提供了有关原因的一些相关背景。虽然这些文档适用于Spring Boot,但我认为它适用于测试所有插件(Jacoco是)。
多模块Maven构建不能直接包含maven插件 是反应堆的一部分,除非它们之前已经建成。 ... 标准版本通过启动来解决此限制 通过 maven-invoker-plugin 进行采样,这样他们就不会参与了 反应器中。
示例应用程序在构建期间用作集成测试 (当你安装mvn时)。 由于他们利用了这一点 spring-boot-maven-plugin他们不能直接调用,等等 而是通过maven-invoker-plugin启动。