2013-07-14 18 views
9

私の質問はthis threadで解決されましたが、説明は不明です。拡張機能付きMaven 3のプロファイル

私のpom.xmlファイルのいずれかで、このビルド定義を持っている:私はMavenの-S3-ワゴン拡張子を使用してい

<build> 
    <finalName>${my.project}</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.0</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
    <extensions> 
     <extension> 
      <groupId>org.kuali.maven.wagons</groupId> 
      <artifactId>maven-s3-wagon</artifactId> 
      <version>1.1.19</version> 
     </extension> 
    </extensions> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/settings.properties</include> 
      </includes> 
     </resource> 
    </resources> 
</build> 

注意してください。 次に、2つの異なるプロファイルを作成したいと思います。それぞれ独自の設定、プラグイン、拡張機能を持っていますが、mavenではプロファイルの下に拡張タグを使用できません。

私は、プロファイル使用してみてください:

<profiles> 
    <profile> 
     <id>local-build</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <finalName>${my.project}</finalName> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.0</version> 
        <configuration> 
         <source>1.6</source> 
         <target>1.6</target> 
        </configuration> 
       </plugin> 
      </plugins> 
      <extensions> 
       <extension> 
        <groupId>org.kuali.maven.wagons</groupId> 
        <artifactId>maven-s3-wagon</artifactId> 
        <version>1.1.19</version> 
       </extension> 
      </extensions> 
      <resources> 
       <resource> 
        <directory>src/main/resources</directory> 
        <filtering>true</filtering> 
        <includes> 
         <include>**/settings.properties</include> 
        </includes> 
       </resource> 
      </resources> 
     </build> 
    </profile> 
</profiles> 

が、私は私のポンポンでエラーが出ます:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'extensions'. One of '{"http://maven.apache.org/POM/4.0.0":defaultGoal, "http://maven.apache.org/POM/ 
4.0.0":resources, "http://maven.apache.org/POM/4.0.0":testResources, "http://maven.apache.org/POM/4.0.0":directory, "http://maven.apache.org/POM/4.0.0":filters, "http:// 
maven.apache.org/POM/4.0.0":pluginManagement}' is expected. 

質問だから、拡張タグを使用して、私はプロファイルを使用することはできませんか?プロファイルを使用してビルド拡張を使用または変更するにはどうすればよいですか?

答えて

4

それはあなたが何buildセクションで、その中にbuild要素を持っていますが、することはできません述べているので実際のところ、公式Maven POM referenceは、Mavenのプロファイルの一部としてextensionsの可能使用状況については明らかではありません。

しかし、公式Maven modelは、profileセクション内で実際に使用できるセクションbuildを効果的にフィルタリングして提供します。そして確かにextensionsはありませんです。

ただし、Maven拡張機能とは何ですか?ビルド/ライフサイクルの強化だけでなく、基本的にビルドに参加するMavenビルドのランタイムクラスパスに追加されたライブラリですが、最終的な成果物はパッケージ化されていません。このようなシナリオでのしたがって

、(プロファイルで拡張子を持っているか、拡張子を追加/変更するプロファイルを持っている必要がある場合)は、次のトリック使用することができます

  • をデフォルトの拡張子として無害な拡張子を持ちますビルドの
  • はGAV座標(G roupId、 rtifactId、V ERSION)を定義する特性を有している(無害な手段は何でも基本的にビルドのクラスパスの一部であると可能性ライブラリまったく影響しません)このエクステンションの

    <project> 
        <modelVersion>4.0.0</modelVersion> 
        <groupId>com.sample</groupId> 
        <artifactId>project</artifactId> 
        <version>0.0.1-SNAPSHOT</version> 
    
        <properties> 
         <extension.groupId>junit</extension.groupId> 
         <extension.artifactId>junit</extension.artifactId> 
         <extension.version>4.11</extension.version> 
        </properties> 
    
        <build> 
         <extensions> 
          <extension> 
           <groupId>${extension.groupId}</groupId> 
           <artifactId>${extension.artifactId}</artifactId> 
           <version>${extension.version}</version> 
          </extension> 
         </extensions> 
        </build> 
    
        <profiles> 
         <profile> 
          <id>customize-extension</id> 
          <properties> 
           <extension.groupId>junit</extension.groupId> 
           <extension.artifactId>junit</extension.artifactId> 
           <extension.version>4.12</extension.version> 
          </properties> 
         </profile> 
        </profiles> 
    
    </project> 
    

    デフォルトのビルド(customize-extensionプロファイルなしの活性化:イオン

  • 次のサンプルPOM指定された所望の(有用な)拡張例として

、これらの特性を上書きプロファイルを有します)は、propertiesという既定値を使用し、junitをビルド拡張として追加します。これは無害です(ただし、別のjunitバージョンのビルドと競合する可能性がありますので、同じバージョンを使用することを忘れないでください)それのためのライブラリ)。ビルドログの一部として

mvn initialize -X 

とチェックを::

あなたはMavenのは、私たちのケースで情報をチェックして、デバッグフラグを有効にするために、本当に最初build phaseを実行することにより、それを拾うだろう確認することができます

[DEBUG] Populating class realm extension>junit:junit:4.11 
[DEBUG] Included: junit:junit:jar:4.11 

今度は、私たちのトリックを使用してみましょう:のプロファイルを経由して(変化する)ビルドの拡張子を追加してみましょう:

mvn initialize -X -Pcustomize-extension 

そして、我々のビルドログの一環として、我々は持っているでしょう:

[DEBUG] Populating class realm extension>junit:junit:4.12 
[DEBUG] Included: junit:junit:jar:4.12 

ビンゴ。 Mavenは別の拡張機能(この場合は別のバージョンの4.12)を取得し、プロファイルを使用してビルド拡張を変更(または実際に意味のある追加)することに成功しました。

0

だけクレイジーなアイデア:使用モジュール

次のように親pomを定義します。

<groupId>org.example</groupId> 
<artifactId>my-parent</artifactId> 
<version>1.0</version> 
<packaging>pom</packaging> 
<profiles> 
    <profile> 
     <id>use-pom1</id> 
     <modules> 
      <module>pom1</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>use-pom2</id> 
     <modules> 
      <module>pom2</module> 
     </modules> 
    </profile> 
</profiles> 

pom1pom2上に所望の拡張を定義します。

+0

確かに面白いですアイデアはそれを複雑にする可能性があります。これはステーク上の生産システムなので、私はもっと簡単な\ stable \ official \ testedソリューションを探しています。ありがとうthougth – forhas

+0

さて、あなたは 'maven-assembly-plugin'を使って、descriptor.xmlを使ってみることができます。しかし、私はそれがあなたの拡張機能が何をするかは疑いがあります。 –

0

私は解決策が

は拡張子が定義されているビルドセクションを定義して、(以下に示す第二のプロファイルのように)真の属性を設定するプロファイルにここhttp://maven.apache.org/guides/mini/guide-using-extensions.html

だと思う

<build> 
    <extensions> 
     <extension> 
      <groupId>org.apache.maven.wagon</groupId> 
      <artifactId>wagon-ssh</artifactId> 
      <version>2.9</version> 
     </extension> 
    </extensions> 
</build> 

<profiles> 
    <profile> 
     <id>create-default</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
      <property> 
       <name>build</name> 
       <value>full</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <goals> 
           <goal>repackage</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

    <profile> 
     <id>create-core</id> 
     <activation> 
      <property> 
       <name>build</name> 
       <value>full</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-jar-plugin</artifactId> 
        <extensions>true</extensions> 
        <version>2.6</version> 
        <configuration> 
         <finalName>import-station-core-${project.version}</finalName> 
        </configuration> 
        <executions> 
         <execution> 
          <id>make-jar</id> 
          <phase>package</phase> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 
関連する問題