Maven 3 регрессия: профильные зависимости потеряны? - PullRequest
3 голосов
/ 18 января 2012

Я наблюдал изменение поведения между Maven 2 и Maven 3. Это ошибка или особенность?Я не смог найти ничего в Замечаниях по совместимости Maven 3.x

Я использую два разных профиля для добавления зависимостей для разных сред в многомодульном проекте.

parent-pom:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>group</groupId>
    <artifactId>main</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>

    <modules>
        <module>common</module>
        <module>portal</module>
    </modules>
</project>

Common-pom содержит профиль:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>group</groupId>
    <artifactId>common</artifactId>
    <packaging>jar</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <parent>
        <groupId>group</groupId>
        <artifactId>main</artifactId>   
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>   
    <profiles>
        <profile>
            <id>development</id>
            <dependencies>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.14</version>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>production</id>
            <dependencies>
                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.1.1</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles> 
</project>

Portal-pom имеет только общую зависимость и должен включать транзитивную зависимость от общегоmodule:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>group</groupId>
    <artifactId>portal</artifactId>
    <packaging>war</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <parent>
        <groupId>group</groupId>
        <artifactId>main</artifactId>   
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>group</groupId>
            <artifactId>common</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

Построение этого проекта (из родительского) через Maven2 mvn -P production package приводит к WAR, который включает транзитивную зависимость.(Я использовал эти простые зависимости для удобного воспроизведения). При выполнении через Maven3 я получаю только общий файл .jar в WAR, но не транзитивную зависимость.

Это желаемое поведение?

ДляСделайте вещи даже «интересными»: если один из профилей активирован по умолчанию (явно в common-pom, так как активация не наследуется от родительского элемента к дочерним модулям), эти переходные зависимости всегда добавляются на портал.Но фильтрация или настройка свойств с помощью профилей работает, как и ожидалось.

Ответы [ 2 ]

4 голосов
/ 18 января 2012

Этот комментарий решает его одним способом:

описанная выше ситуация работает при использовании активации профиля с использованием свойств

При активации свойства (а не через -P) оно работает в Maven2 и 3

Но реальное решение было «вызвано» плагином релиза: Профиль необходимо отправить в release-плагин через -Darguments=-Pproduction

1 голос
/ 18 января 2012

Не решение, но ваш вариант использования похож на эту открытую ошибку maven.Интересно, что, согласно деталям, это происходит и в более ранних версиях Maven.

...