2016-11-04 7 views
1

企業全体でスーパーポーム私たちが使用する多くのデフォルトを定義するために使用します。たとえば、スーパーPomは、使用するJDKのバージョンおよびその他のパラメータを定義します。これは親プロジェクトとして継承されています。プロジェクトpomの親pomに定義されている有効なプロファイルを設定

ほとんどのプロジェクトではJDK 1.7が使用されていますが、一連のプロジェクトはまだJDK 1.6のバージョンです。私は私の親のポンポンで、次のプロファイルの定義を入れている:

<properties> 
    <travelclick.snapshot.repo>artifactory/libs-snapshot-local</travelclick.snapshot.repo> 
    <old.javac.source>1.5</old.javac.source> 
    <old.javac.target>1.6</old.javac.target> 
</properties> 
<profiles> 
    ... 
    <profile> 
     <id>jdk1.6</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>com.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.3</version> 
        <configuration> 
         <...> 
         <source>${old.javac.source}</source> 
         <target>${old.javac.target}</target> 
         <...> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
    <...> 
</profiles> 

は今、私はjdk1.6と呼ばれるプロファイルを持っていると私はそれがデフォルトで、このいずれかを使用する必要があること、プロジェクトのPOMで指定したいと思います。これはどうすればいいですか?私はプロジェクトのPOMに追加しようとしました

<profiles> 
    <profile> 
     <id>jdk1.6</id> 
     <activations> 
      <activeByDefault>true</activeByDefault> 
     </activations> 
    </profile> 
</profile> 

しかし、それは私のJDK1.6プロファイルを再定義します。

私はこの中に入れて試してみた:

<activeProfiles> 
    <activeProfile>jdk1.6</activeProfile> 
</activeProfiles> 

しかし、唯一のsettings.xmlに動作すること。

親pomにプロファイルを指定し、これを子pomのアクティブなプロファイルとするにはどうすればよいですか?


もっと試み

私は、プロパティを使用してみました。私の地元のポンポンで

<profiles> 
    <profile> 
     <id>jdk1.6</id> 
     <activation> 
      <property> 
       <name>use-jdk1.6</name> 
      </property> 
     </activation> 
    <profile> 
</profiles> 

そして次:私の親のpom.xmlで

<properties> 
    <use-jdk1.6>true</use-jdk1.6> 
</properties> 

しかし、それは、プロファイルをピックアップしていません。そして、これはうまくいきます:

$ mvn -Puse-jdk1.6 clean package site 

私は親プロファイルが動作することを知っています。


プロファイル

あなたはあなたがゴール助けをexectuing詳細をプロファイリング追加することができます。私は、コマンドラインからJDK1.6をアクティブにすることができ、すべての-プロファイル

[INFO] Listing Profiles for Project: xxxx 
    Profile Id: artifactory (Active: true , Source: settings.xml) 
    Profile Id: jdk1.6 (Active: false , Source: pom) 
    Profile Id: arse-version (Active: false , Source: pom) 
    Profile Id: urge (Active: false , Source: pom) 

。私はちょうど私の子供のポムのデフォルトとしてそれをアクティブにしたい。

+0

プロファイルを使用する必要がありますか?使用するJDKをオーバーライドしたいだけなら、 'source'には' javac.source'、 'maven-compiler-plugin'の' target'には 'javac.target'のようなMavenプロパティを使います。次に、デフォルトよりも異なるものが必要な場合(親が '1.7'に設定する)、子POMに2つのプロパティを定義させることができます。 – Tunaki

+0

あなたはあなたの状況を複雑にしていると思います。あなたの目標がスーパーPOMで言及されているJDKとは異なるJDKを使ってそれらのプロジェクトをコンパイルすることであれば、あなたの子プロジェクトはそのPOMのコンパイラバージョンを上書きします。これをやろうとしましたか? –

+0

あなたはあなたのプロフィールの詳細を追加できますか? –

答えて

1

AAAAHGGGGHHHH!

それは私の叫び声です。

問題が見つかりましたが、なぜこれが機能していないのですか。私の親ポンポンで

が、私は以下の持っていた: use-jdk1.6プロパティを設定するだけではなかったように思われ、

<properties> 
    <use-jdk1.6>true</use-jdk1.6> 
</properties> 

そして:私の子供のポンポンで

<properties> 
    <javac.source>1.7</javac.source> 
    <javac.source>1.7</javac.source> 
    <old.javac.source>1.7</old.javac.source> 
    <old.javac.source>1.7</old.javac.source> 
    ... 
</properties> 
<profiles> 
    <profile> 
     <id>jdk1.6</id> 
     <activation> 
      <property> 
       <name>use-jdk1.6</name> 
      </property> 
     </activation> 
     <build> 
     <plugins> 
      .... 
      <plugin> 
       <groupId>maven-compiler-plugin</groupId> 
       ... 
       <configuration> 
        <!-- This isn't doing what I think --> 
        <source>${old.javac.source}</source> 
        <target>${old.javac.target}</source> 
        ... 
       </configuration> 
      </plugin> 
     </plugins> 
<profile> 

を、私はこれを持っていましたワーキング。しかし、そうではありませんでした。私はプロフィールを設定していた。私はシステムプロパティjavac.sourcejavac.targetセットを持っている場合

何が起こるかというと、それは(私はバージョン1.7を使用していない<source><target>を明示的に設定していたにも関わらず)maven-compiler-pluingの設定を無効にしています。

私はそれがjava-versionのようなものではなくjavac.sourceという名前のプロパティを設定していることに気付く前に、この問題で6時間を費やしました。

関連する問題