maven - Maven Mojo 在通过阶段调用时不使用反应器。当被称为独立目标时它工作正常
问题描述
我已经实现了一个自定义的 maven mojo 来对输入 POM 中提到的所有模块执行一些操作。从命令行调用时,mojo 按预期工作,例如:
mvn plugin_group_id:artifact_id:version:mojo_goal_name
但是当我把它作为一个阶段的一部分并像这样调用阶段时,它的工作原理就不一样了:
mvn phase_having_mojo_as_goal
在这种情况下,它不使用反应器并忽略模块。
插件POM是:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aaa.bbb.ccc</groupId>
<artifactId>test-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>release-maven-plugin</name>
<description>Test Plugin</description>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>5.7.0.202003110725-r</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.maven.shared/maven-invoker -->
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-invoker</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.maven/maven-artifact -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.eclipse.sisu</groupId>
<artifactId>org.eclipse.sisu.plexus</artifactId>
<version>0.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>3.3.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-container-default</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-container-default</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.twdata.maven</groupId>
<artifactId>mojo-executor</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-aether-provider</artifactId>
<version>3.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>3.0.15</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
解决方案
当您在聚合器上运行目标或阶段时,它会在每个模块上运行。
对于独立目标,这意味着目标仅在每个模块上运行。
对于一个阶段,这意味着该阶段在每个模块上运行。阶段是否包含插件定义是完全不同的故事。
您的阶段运行发生在每个模块上,但只有聚合器具有阶段插件的定义,其他模块没有该定义。
如果您将插件定义放在每个模块或它们的父 POM 中,您将看到它有效。
推荐阅读
- xml - XSLT:将节点及其子节点嵌套/移动到新节点中
- python - pyautogui 像素函数的 Python 问题,显示“Pillow 是在没有 XCB 支持的情况下构建的”
- python - 我正在制作一个环形网络,其中每个节点只能使用 python 中的套接字与其对等方交谈
- angular - Angular:多次并行调用 API 抛出 500 状态
- abstract-syntax-tree - 关于编译器实现的问题——语法分析
- python - Python:组合来自 4 个列表的元素并跳过其中包含重复项的列表组合
- python - 您如何使用 CSS 设置 DataTable Dropdown 样式?
- python - 无效的块标签:'endblock'。您是否忘记注册或加载此标签?
- angular - 调试服务 http.get 无法连接到 api。获取 'https://localhost:55555/api/MyAPI: 0 Unknown Error 的 Http 失败响应'
- c# - 如何使用 MassTransit 更改属性的大小写