如何激活依赖模块中的Maven配置文件?

假设我有一个模块A:jar ,其运行时和编译依赖依赖于JDK版本。 在我的例子中,我有一个用于JAXB API的pre-jdk6-profile :在JDK 1.6.0之前,我需要包含jaxb-api-nnn.jar作为编译依赖项。 这个配置文件被放置到A.pom

我也有模块B:war ,这取决于A:jar 。 我希望能够在构建服务器上激活此配置文件以构建JDK 1.5.x可交付成果。 当我使用激活的给定配置文件执行Maven时,我收到消息:

mvn -Ppre-jdk6-profile -o install
[WARNING]
        Profile with id: 'pre-jdk6-profile' has not been activated.

jaxb-api-nnn.jar在结果B.war缺失。 但是,如果从父pom.xml构建时激活此配置文件,则一切正常。 这意味着配置文件不会从依赖关系继承,并且父多模块pom.xml能够正确构建所有内容,因为它似乎将所有配置文件合并到了reactor中。

将配置文件转移到父pom会使事情变得更糟,因为依赖项适用于所有其他项目(例如C:ear )。 这个任务是否有很好的解决方案,即,如果任何模块A依赖于模块B ,那么所有由配置文件激活的编译和运行时依赖关系都可以正确处理?

项目A:jar的配置文件如下所示:

<project ...>
    <artifactId>A</artifactId>
    <packaging>jar</packaging>
    ...
    <parent>
        <artifactId>P</artifactId>
        ...
    </parent>

    <profiles>
        <profile>
            <id>pre-jdk6-profile</id>

            <activation>
                <jdk>(,1.6.0)</jdk>
            </activation>

            <dependencies>
                <dependency>
                    <groupId>javax.xml.ws</groupId>
                    <artifactId>jaxws-api</artifactId>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
...
</project>

a)在多模块构建中,您应该始终从顶层构建,而不是从单个模块构建。 如果您只想构建一个模块,请使用高级反应堆选项(请参阅mvn --help),如下所示:

mvn -pl mymodule

b)定义并激活父pom中的配置文件,但将配置添加到子pom中。

父pom.xml

<profiles>
    <profile>
         <id>pre-jdk-6</id>
         <activation>
            <jdk>(,1.6.0)</jdk>
         </activation>
    </profile>
</profiles>

孩子pom.xml

<profiles>
    <profile>
        <id>pre-jdk-6</id>

        <dependencies>
            <dependency>
                <groupId>javax.xml.ws</groupId>
                <artifactId>jaxws-api</artifactId>
            </dependency>
        </dependencies>
    </profile>
</profiles>

事实之后有几种注释方式:

  • 当您使用-P profName ,它将激活名为“profName”的配置文件
  • 之后,它会禁用所有具有<activation>标签的配置文件。 它们是否由java版本激活并不重要,如示例中所示,或者默认情况下或env值或任何值。
  • 这意味着-P导致任何其他激活的配置文件变为停用状态。
  • 解决方案:使用<activation><jdk>...</jdk></activation>或使用-P但不要同时使用两者。

    链接地址: http://www.djcxy.com/p/62115.html

    上一篇: How to activate a Maven profile in a dependent module?

    下一篇: Query rows by time of creation?