【问题标题】:Maven child dependencies based on profile基于配置文件的 Maven 子依赖项
【发布时间】:2015-02-09 22:33:00
【问题描述】:

我有一个多模块项目,我正在尝试根据选择的配置文件更改子项目中构建的依赖关系。在我的“dev”和“prod”配置文件中,我需要 maven 来包含 mysql 库,而在我的“本地”配置文件中,我需要 maven 来包含 h2 库。

父 POM

<profile>
    <id>local</id>
    <properties>
        <!-- Defines the environment variable -->
            <build.env>local</build.env>
    </properties>
</profile>
<profile>
    <id>dev</id>
    <properties>
        <!-- Defines the environment variable -->
        <build.env>dev</build.env>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>
<profile>
    <id>prod</id>
    <properties>
        <!-- Defines the environment variable -->
            <build.env>production</build.env>
    </properties>
</profile>

数据模块POM

<!-- Local specific dependencies -->
<profile>
    <id>local</id>
    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${version.h2}</version>
        </dependency>
    </dependencies>
    <activation>
        <property>
            <name>build.env</name>
            <value>local</value>
        </property>
    </activation>
</profile>

<!-- Dev specific dependencies -->
<profile>
    <id>dev</id>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${version.mysql}</version>
        </dependency>
    </dependencies>
    <activation>
        <property>
            <name>build.env</name>
            <value>dev</value>
        </property>
    </activation>
</profile>

<!-- Production specific dependencies -->
<profile>
    <id>prod</id>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${version.mysql}</version>
        </dependency>
    </dependencies>
    <activation>
        <property>
            <name>build.env</name>
            <value>production</value>
        </property>
    </activation>
</profile>

问题在于,从根项目构建时,切换配置文件似乎不会影响子 pom,并且数据模块 jar 文件中不包含任何依赖项(没有配置文件继承?)。如何触发子配置文件以包含上面列出的依赖项?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    父 POM:

    <profile>
        <id>local</id>
        <properties>
            <!-- Defines the environment variable -->
            <build.env>local</build.env>
            <!-- Define DB dependency type/version -->
            <dbGroup>com.h2databse</dbGroup>
            <dbArtifact>h2</dbArtifact>
            <dbVersion>${version.h2}</dbVersion>
        </properties>
    </profile>
    [...]
    

    模块 POM:

    <dependency>
        <groupId>${dbGroup}</groupId>
        <artifactId>${dbArtifact}</artifactId>
        <version>${dbVersion}</version>
    </dependency>
    

    您必须将您的 version.h2/version.mysql 定义移动到您的父 POM,但这应该不是问题。

    【讨论】:

    • 谢谢,我今晚会试试这个,但我相信这会奏效。
    猜你喜欢
    • 2013-08-07
    • 2017-07-07
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多