【发布时间】:2020-07-31 18:39:42
【问题描述】:
我正在创建一个多模块 maven 项目,我想要的模块执行顺序是 Parent、Child1Plugin、Child、Child2。 Child1Plugin 还具有 CHild2 的依赖项。但到目前为止,反应器正在运行以下模块顺序:
**Reactor Summary:**
[INFO] parent 0.0.1-SNAPSHOT .............................. SUCCESS [ 0.387 s]
[INFO] Child2 ............................................. SUCCESS [ 2.768 s]
[INFO] Child1Plugin ....................................... SUCCESS [ 1.182 s]
[INFO] Child 0.0.1-SNAPSHOT ............................... SUCCESS [ 0.102 s]
***Parent:***
<groupId>com.io</groupId>
<artifactId>ParentMod</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parent</name>
<description>Thisisparent</description>
<modules>
<module>Child1Plugin</module>
<module>Child</module>
<module>Child2</module>
</modules>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
</project>
**Child1Plugin**
@Mojo(name = "dependency-counter", defaultPhase = LifecyclePhase.COMPILE)
public class DependencyCounterMojo extends AbstractMojo{
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("$$$$$$$$$$$$$$ ....Mojo execution begins.... $$$$$$$$$$$$$$");
GenerateFeature ob=new GenerateFeature();
ob.generationFeature();
}
Pom.xml:
<parent>
<groupId>com.io</groupId>
<artifactId>ParentMod</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Child1Plugin</artifactId>
<packaging>maven-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.io</groupId>
<artifactId>Child2</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
**Child2**
public class GenerateFeature {
public void generationFeature() {
System.out.println("$$$$$$$$$$$$$$ ....I am generating feature files");}
Pom.xml:
<parent>
<groupId>com.io</groupId>
<artifactId>ParentMod</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Child2</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
**Child**
<parent>
<groupId>com.io</groupId>
<artifactId>ParentMod</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Child</artifactId>
<build>
<plugins>
<plugin>
<groupId>com.io</groupId>
<artifactId>Child1Plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>dependency-counter</goal>
</goals>
</execution>
</executions>
<configuration>
<scope>test</scope>
</configuration>
</plugin>
</plugins>
</build>
使用上面的模块,我尝试首先使用 module-Child1Plugin 安装插件,然后使用 module-Child 调用目标,最后使用 module-Child2 运行我的黄瓜测试。但是反应器产生了不同的顺序,因此我无法实现我想要的。
【问题讨论】:
-
如果
Child1对Child2有依赖,那么Child2必须在Child1之前执行。如果您想在Child1和Child2之后运行测试,则将它们移动到一个单独的模块并让新模块依赖于Child1和Child2。然而,实际的问题是:为什么Child2中的测试需要Child1?这似乎是错误的。 -
我希望顺序如下: 1. Child1Plugin(这会安装插件) 2. Child(这会调用在步骤 1 中使用插件创建的目标/mojo) 3. Child2(这会调用我的测试)
-
再次:如果
Child1依赖于Child2,则必须先编译Child2。这是依赖图的直接结果。如果必须反过来执行,则必须反转依赖关系。 -
是的 child2 比 child1 先运行,这就是我在反应器摘要结果中发布的内容,但我希望结果按顺序排列:1. Child1Plugin(这会安装插件) 2. Child(这会调用在步骤 1 中使用插件创建的目标/mojo)3. Child2(这会调用我的测试)
-
我刚刚告诉过你:如果你想让
Child1先运行,那么你必须反转依赖。如果Child2依赖于Child1,则Child1将首先执行。但是,这需要删除从Child1到Child2的依赖关系,因为 maven 无法处理循环依赖关系。
标签: java maven maven-2 maven-3 maven-plugin