【问题标题】:Adding dependencies in a Maven sub-module when a profile is activated激活配置文件时在 Maven 子模块中添加依赖项
【发布时间】:2011-06-14 15:50:33
【问题描述】:

我有一个项目,其父 pom.xml 定义了配置文件,还有一个 debug 配置文件:

<profile>
    <id>debug-true</id>
    <activation>
        <property>
            <name>debug</name>
            <value>true</value>
        </property>
    </activation>
</profile>

我希望我的一个子模块在激活配置文件 debug 时添加依赖项 jboss-seam-debug

我写了这个孩子 pom.xml :

<profiles>
    <profile>
        <id>debug-true</id>
        <dependencies>
            <dependency>
                <groupId>org.jboss.seam</groupId>
                <artifactId>jboss-seam-debug</artifactId>
            </dependency>
        </dependencies>
    </profile>
</profiles>

但它不起作用,当我指定 -Ddebug=true 时,该依赖关系不是依赖树的一部分......就像子 pom.xml 重新定义了我的 debug 配置文件......

属性 debug 的值为true 时,您知道如何将jboss-seam-debug 依赖项添加到我的子模块吗?


实际上,这是我的全部需求,但有点复杂。

这是我的父母pom.xml

<profiles>
    <profile>
        <id>env-dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <property>
                <name>env</name>
                <value>dev</value>
            </property>
        </activation>
        <properties>
            <debug>true</debug>
    ... other properties ...
        </properties>
    </profile>
    ...

通常,我只是在mvn 命令行上传递-Denv=dev 并希望我的子模块仅在属性debug 定义为true 时才激活true 所以我在子模块中写了pom.xml

<profiles>
    <profile>
        <id>debug-true</id>
        <activation>
            <property>
                <name>debug</name>
                <value>true</value>
            </property>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jboss.seam</groupId>
                <artifactId>jboss-seam-debug</artifactId>
            </dependency>
        </dependencies>
    </profile>
    ...

仅通过 -Denv=dev 不起作用,因为我没有通过 system 属性 -Ddebug=true,它是由我激活的 ma​​ven 属性父母pom.xml,我的孩子没有“看到”...

【问题讨论】:

    标签: xml maven dependencies profile


    【解决方案1】:

    这是因为配置文件没有在 maven 中继承。这意味着子 POM 中的 debug-true 不会继承父 POM 中配置文件的激活,也称为 debug-true

    你有两种可能解决这个问题:

    1) 调用mvn -Pdebug-true 将触发每个POM 中的对应配置文件

    2) 在每个 POM

    中添加激活码

    我个人更喜欢第一个解决方案。

    【讨论】:

    • 其实好像更复杂一点:MNG-3228
    • 我刚刚详细说明了我的问题,这个问题有点复杂,我无法选择一个真正“漂亮”的解决方案......
    • 我认为唯一的解决方案是在子 POM 中也将配置文件命名为 env-dev
    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多