2016-09-16 2 views
3

Я определяю версии плагина в разделе <pluginManagement> родительского ПОМ и хочу использовать их в разделе субмодулей <plugins>.Maven игнорирует версию плагина из pluginУправление в профиле подмодуля

Это работает, если плагин не используется внутри профиля подмодуля. В этом случае версия из родительского раздела POM <pluginManagement> игнорируется.

Выход mvn -v:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) 
Maven home: /usr/local/Cellar/maven/3.3.9/libexec 
Java version: 1.8.0_102, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre 
Default locale: de_DE, platform encoding: UTF-8 
OS name: "mac os x", version: "10.11.6", arch: "x86_64", family: "mac" 

./pom.xml:

<?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> 
    <prerequisites> 
     <maven>3.1.0</maven> 
    </prerequisites> 

    <modules> 
     <module>project1</module> 
    </modules> 

    <groupId>org.example.test</groupId> 
    <artifactId>test-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>com.github.eirslett</groupId> 
        <artifactId>frontend-maven-plugin</artifactId> 
        <version>1.0</version> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</project> 

./project1/pom.xml:

<?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> 
    <prerequisites> 
     <maven>3.1.0</maven> 
    </prerequisites> 

    <parent> 
     <groupId>org.example.test</groupId> 
     <artifactId>test-parent</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>project1</artifactId> 

    <profiles> 
     <profile> 
      <id>p1</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>com.github.eirslett</groupId> 
         <artifactId>frontend-maven-plugin</artifactId> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

Выход mvn versions:display-plugin-updates:

$ mvn versions:display-plugin-updates 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Build Order: 
[INFO] 
[INFO] test-parent 
[INFO] project1 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building test-parent 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- versions-maven-plugin:2.2:display-plugin-updates (default-cli) @ test-parent --- 
[INFO] 
[INFO] All plugins with a version specified are using the latest versions. 
[INFO] 
[INFO] Project defines minimum Maven version as: 3.1.0 
[INFO] Plugins require minimum Maven version of: 3.1.0 
[INFO] Note: the super-pom from Maven 3.3.9 defines some of the plugin 
[INFO]  versions and may be influencing the plugins required minimum Maven 
[INFO]  version. 
[INFO] 
[INFO] No plugins require a newer version of Maven than specified by the pom. 
[INFO] 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building project1 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- versions-maven-plugin:2.2:display-plugin-updates (default-cli) @ project1 --- 
[INFO] 
[INFO] All plugins with a version specified are using the latest versions. 
[INFO] 
[WARNING] The following plugins do not have their version specified: 
[WARNING] com.github.eirslett:frontend-maven-plugin ................. 0.0.26 
[INFO] 
[INFO] Project defines minimum Maven version as: 3.1.0 
[INFO] Plugins require minimum Maven version of: 3.1.0 
[INFO] Note: the super-pom from Maven 3.3.9 defines some of the plugin 
[INFO]  versions and may be influencing the plugins required minimum Maven 
[INFO]  version. 
[INFO] 
[INFO] No plugins require a newer version of Maven than specified by the pom. 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] test-parent ........................................ SUCCESS [ 0.851 s] 
[INFO] project1 ........................................... SUCCESS [ 0.314 s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.649 s 
[INFO] Finished at: 2016-09-16T16:03:04+02:00 
[INFO] Final Memory: 13M/247M 
[INFO] ------------------------------------------------------------------------ 

Я могу дублировать информацию из раздела родительского ПОМ внутри подмодулей, чтобы он работал, но я хочу избежать этого по очевидным причинам.

ответ

1

Maven не игнорируя его, вы можете проверить его, выполнив следующие действия:

mvn -pl project1 help:effective-pom -Doutput=noProfilePom.xml 

В effective-pom цели будет:

Отображает эффективное POM как XML для этой сборки, с активные профили, факторизованные.

Сгенерировано noProfilePom.xml, вы увидите, что эффективно Maven wil l запускается при построении pom.xml модуля project1.

Там мы можем увидеть:

<pluginManagement> 
    <plugins> 
    ... 
    <plugin> 
     <groupId>com.github.eirslett</groupId> 
     <artifactId>frontend-maven-plugin</artifactId> 
     <version>1.0</version> 
    </plugin> 
    </plugins> 
</pluginManagement> 
<plugins> 
    ... 
    <plugin> 
    <artifactId>maven-clean-plugin</artifactId> 
    <version>2.5</version> 
    <executions> 
     <execution> 
     <id>default-clean</id> 
     <phase>clean</phase> 
     <goals> 
      <goal>clean</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    ... 
</plugins> 

Следовательно, pluginManagement были объединены должным образом (взяты из родителей), в то время как секция plugins не обеспечивает его.

Но работает следующим образом:

mvn -pl project1 -Pp1 help:effective-pom -Doutput=withProfilePom.xml 

Примечание: мы также активируя профиль с помощью -Pp1 в рамках выполнения цели.

В рамках генерируемого withProfilePom.xml будет иметь:

<pluginManagement> 
    <plugins> 
    ... 
    <plugin> 
     <groupId>com.github.eirslett</groupId> 
     <artifactId>frontend-maven-plugin</artifactId> 
     <version>1.0</version> 
    </plugin> 
    </plugins> 
</pluginManagement> 
<plugins> 
    <plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 
    <version>1.0</version> 
    </plugin> 

    <plugin> 
    <artifactId>maven-clean-plugin</artifactId> 
    <version>2.5</version> 
    <executions> 
     <execution> 
     <id>default-clean</id> 
     <phase>clean</phase> 
     <goals> 
      <goal>clean</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    ... 
</plugins> 

В этот раз p1 профиль был активен и ее должным образом впрыскивается в plugins раздел его плагин декларации в, принимая затем его версию от pluginManagement родителя ,

Следовательно: раздел pluginManagement не игнорируется plugin s, указанным в профиле.

+0

Тогда почему OP получает предупреждение «Следующие плагины не имеют указанной версии» при запуске подпроекта с профилем p1? –

+2

@LittleSanti это может быть проблема 'version-maven-plugin', а не проблема Maven. –

+0

Похоже, вы правы, A_Di_Matteo. Большое спасибо! – joschi

Смежные вопросы