2016-09-16 5 views
3

私は親POMの<pluginManagement>セクションにプラグインバージョンを定義しており、それらをサブモジュールの<plugins>セクションで使用したいと考えています。Mavenはサブモジュールのプロファイルのプラグイン管理からプラグインバージョンを無視します

プラグインがサブモジュールのプロファイル内で使用されている場合を除き、これは機能しています。この場合、親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] ------------------------------------------------------------------------ 

サブモジュール内の親POMの<pluginManagement>セクションの情報を複製して機能させることができますが、明らかにこの問題を回避したいと思います。

答えて

1

Mavenのは、あなたが次のことを実行して、それを確認することができ、それを無視していません。

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

effective-pom目標はなりますと

は、このビルドのためのXMLとしての効果的なPOMを表示有効なプロファイルが組み込まれています。

noProfilePom.xmlが生成されていることを確認すると、 project1モジュールのpom.xmlをビルドするときに実行します。

あり、私たちが見ることができる。したがって

<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> 

pluginsセクションには、それを提供していませんが、pluginManagementは、(親から取られた)適切に統合されました。

しかし、次のことを実行している:

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プロファイルがアクティブであったとは、適切に親のpluginManagementからそのバージョンを取って、pluginsセクションに、そのプラグインの宣言を注入しました。

したがって、pluginManagementセクションは、プロファイルで宣言されたpluginによって無視されません。

+0

次に、プロファイルp1のサブプロジェクトを実行しているときに、OPに「次のプラグインにバージョンが指定されていません」という警告が表示されるのはなぜですか? –

+2

@LittleSanti Mavenの問題ではなく、実際には 'versions-maven-plugin'の問題かもしれません。 –

+0

あなたが正しいと思われる、A_Di_Matteo。どうもありがとう! – joschi

関連する問題