<groupid> @ project.groupId @ </groupid>中@符号的用途是什么?

时间:2014-01-02 22:53:24

标签: maven maven-plugin jacoco

我正在尝试在多模块项目的子模块中运行'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但是没有在那里创建目标目录。

赞赏正确的方向。

2 个答案:

答案 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启动。