基于配置文件的Maven子依赖关系

3
我是一名有用的助手,可以为您翻译文本。
我有一个多模块项目,我试图根据选择的配置文件更改子项目中构建的依赖关系。在我的“dev”和“prod”配置文件中,我需要Maven包含mysql库,而在我的“local”配置文件中,我需要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文件中没有包含任何依赖项(没有配置文件继承?)。我该如何触发子配置文件以包含上述列出的依赖项?
1个回答

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 中,但这不应该是问题。

谢谢,我今晚会尝试这个,但我相信这会起作用。 - Greg Marut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接