我的项目具有以下结构:
tst.parent
with modules:
tst.one
-> has dependency to tst.two
tst.two
-> has dependency to tst.three
tst.three
目标是拥有两个版本。第一个是完整版本,第二个是构建模块tst.one和tst.three
出于这个原因,我在tst.parent的pom.xml中创建了两个配置文件:
<?xml version="1.0"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tst</groupId>
<artifactId>tst.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>tst.parent</name>
<packaging>pom</packaging>
<profiles>
<profile>
<id>part</id>
<modules>
<module>tst.one</module>
<module>tst.three</module>
</modules>
</profile>
<profile>
<id>full</id>
<modules>
<module>tst.one</module>
<module>tst.two</module>
<module>tst.three</module>
</modules>
</profile>
</profiles>
</project>
模块tst.one的pom.xml:
<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>
<parent>
<artifactId>tst.parent</artifactId>
<groupId>tst</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>tst.one</artifactId>
<dependencies>
<dependency>
<groupId>tst</groupId>
<artifactId>tst.two</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
模块tst.two的pom.xml:
<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>
<parent>
<artifactId>tst.parent</artifactId>
<groupId>tst</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>tst.two</artifactId>
<dependencies>
<dependency>
<groupId>tst</groupId>
<artifactId>tst.three</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
模块tst.three的pom.xml:
<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>
<parent>
<artifactId>tst.parent</artifactId>
<groupId>tst</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>tst.three</artifactId>
</project>
如果我运行完整版本,则反应堆正在以正确的顺序对模块进行排序/构建:
mvn clean install -P full
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] tst.parent
[INFO] tst.three
[INFO] tst.two
[INFO] tst.one
但如果我运行部分构建,那么模块的排序方式就像我在模块部分中列出的那样:
mvn clean install -P part
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] tst.parent
[INFO] tst.one
[INFO] tst.three
[INFO]
如果我使用--project命令行选项,则正确计算构建顺序:
mvn clean install -P full --projects tst.one,tst.three
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] tst.three
[INFO] tst.one
[INFO]
但是使用这种方法,有一个限制,模块tst.two也必须作为源。
有没有人知道如何告诉maven在部分构建中,在计算reactor buildorder时应考虑从模块tst.one到模块tst.three的传递依赖性?
或
我怎么能告诉maven忽略丢失的模块tst.two作为源并从存储库中解决这个模块的--project方法?