7

マルチモジュールの Maven プロジェクトがあり、JBoss 4 や JBoss 7 など、さまざまなプラットフォームで実行できます。platformプロパティを指定し、アーティファクトの分類子として使用し、プラットフォーム固有のプロファイルをアクティブ化します。次のようなサブモジュール:

<activation>
    <property>
        <name>platform</name>
        <value>jboss71x</value>
    </property>
</activation>

これらのプロファイルでは、とりわけ、提供された依存関係のバージョンを指定します。たとえば、jboss 親 pom のインポートを行います。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.as</groupId>
            <artifactId>jboss-as-parent</artifactId>
            <version>${dependencies.jbossas7.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

そのため、プロパティをコマンドライン引数 ( -Dplatform=jboss71x) として指定すると、問題なく動作します。

しかし、プロパティが<properties>ルート pom.xml のセクションに設定されている場合 (親 pom にも設定しようとしました)、親 pom のバージョンが欠落しているように見えます:

[ERROR]     'dependencies.dependency.version' for commons-lang:commons-lang:jar is missing. @ line 46, column 21
[ERROR]     'dependencies.dependency.version' for commons-beanutils:commons-beanutils:jar is missing. @ line 56, column 21
[ERROR]     'dependencies.dependency.version' for commons-collections:commons-collections:jar is missing. @ line 61, column 21

Maven の最新バージョンは 3.2.1 です。

これが発生する理由と、コマンド ラインではなく pom.xml でこのプロパティ値を指定するにはどうすればよいでしょうか?

4

1 に答える 1

15

残念ながら、あなたがやろうとしていることをすることは不可能です。Codehaus の Web サイトで次のメモを見つけるまで、同じことを何時間も試みました。

プロファイルをアクティブにできるのは、Maven コマンド ラインで設定されたプロパティのみであることに注意してください。POM、親 POM、またはその他のプロファイルで設定されたプロパティは効果がありません。

基本的に、プロファイルのアクティブ化は、すべてのプロパティが補間される前に、POM 処理の非常に早い段階で行われます。基本的にこれは、プロファイルをアクティブ化するプロパティが、ビルドの最初に (システム プロパティとして、コマンド ラインで) 定義された値を持っている必要があることを意味します。プロファイルのアクティブ化は、Maven が<properties>要素を処理する前に行われるためです。より詳細な背景ドキュメントを提供する、同様の StackOverflow の質問に対する回答があります。

于 2014-05-06T13:47:15.060 に答える