0

我有一个具有以下结构的示例 Maven 项目:

parent
   frontend
   backend

前端依赖于后端。后端具有用于测试的数据库驱动程序依赖项。但是,这个依赖应该依赖于开发者的settings.xml

    <dependency>
        <groupId>${database.driver.groupId}</groupId>
        <artifactId>${database.driver.artifactId}</artifactId>
        <version>${database.driver.version}</version>
        <scope>test</scope>
    </dependency>

在我的 settings.xml 我有这个:

    <profile>
        <id>database</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <database.driver.groupId>mysql</database.driver.groupId>
            <database.driver.artifactId>mysql-connector-java</database.driver.artifactId>
            <database.driver.version>5.1.9</database.driver.version>
        </properties>
    </profile>

当我只运行后端时,属性被正确替换。但是,如果我运行前端(或父级)传递依赖项不适用于前端,因为它不能再替换属性:

 [WARNING] The POM for de.phil.mvntest:business:jar:0.0.1-SNAPSHOT is invalid, transitive dependencies (if any) will not be available: 2 problems were encountered while building the effective model for de.phil.mvntest:business:0.0.1-SNAPSHOT
 [ERROR] 'dependencies.dependency.artifactId' for ${database.driver.groupId}:${database.driver.artifactId}:jar with value '${database.driver.artifactId}' does not match a valid id pattern. @ 
 [ERROR] 'dependencies.dependency.groupId' for ${database.driver.groupId}:${database.driver.artifactId}:jar with value '${database.driver.groupId}' does not match a valid id pattern. @ 

有趣的是,如果我将配置文件声明移动到父级的 pom.xml 中,它可以正常工作!

所以我的问题是,为什么来自settings.xml 的子模块的属性没有被替换。

注意:“help:active-profiles -N”显示来自 settings.xml 的配置文件处于活动状态。

注2:Maven版本自带STS,是Embedded 3.0.4


遵循 settins.xml 和 poms

后端

<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>
        <groupId>de.phil.mvntest</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>backend</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>${database.driver.groupId}</groupId>
            <artifactId>${database.driver.artifactId}</artifactId>
            <version>${database.driver.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

前端

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>de.phil.mvntest</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>frontend</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>de.phil.mvntest</groupId>
            <artifactId>backend</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

父母

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <groupId>de.phil.mvntest</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <modules>
        <module>backend</module>
        <module>frontend</module>
    </modules>
</project>

设置.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <profiles>
        <profile>
            <id>database</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <database.driver.groupId>mysql</database.driver.groupId>
                <database.driver.artifactId>mysql-connector-java</database.driver.artifactId>
                <database.driver.version>5.1.9</database.driver.version>
            </properties>
        </profile>
    </profiles>
</settings>
4

1 回答 1

0

操作配置文件中的依赖关系不是很安全。它运行良好的唯一情况是针对不同的依赖项运行测试,甚至使用 maven-invoker-plugin 更安全。被部署的 pom 只能有一个依赖集。

于 2013-09-29T14:09:24.777 回答