Maven反应堆和传递依赖

时间:2014-11-21 15:09:07

标签: java maven

我的项目具有以下结构:

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方法?

0 个答案:

没有答案