1

誰かが私を解決するのを手伝ってくれるのではないかと思う問題があります。プロジェクトにMavenを使用して依存関係を解決するモジュール構造があります。この構造では、分類子を使用して区別する内容が異なるバージョンがあります。分類子ごとに、プロパティの分類子の文字列を使用して親pomにプロファイルを定義しました。このように私のモジュールではこのプロパティを使用し、分類子定数を決定するのは私が定義したプロファイルです。私が今立ち往生している問題は、依存関係がモジュールの1つのpomで定義したものから継承されているときに、依存関係階層が分類子を認識しないことです。たとえば、プロジェクトA、B、Cがある場合、BはAに依存し、CはBに依存します。Cから、分類子でBを取得しますが、Aでは取得しません。これは、親pomのプロパティを使用した場合に発生します。代わりに定数文字列を直接使用すると、依存関係が正しくキャッチされます。私が見る唯一の解決策は、各pomでプロファイルを使用して、それらの内部の依存関係を定義することです。しかし、私は5つのプロファイルを持っています!これを解決する他の方法はありませんか?IDEとしてm2eプラグインを備えたSTS3.8を使用しています。

前もって感謝します!

ポンポンを追加します

親pom:

<profiles>
    <profile>
        <id>TRUNK</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <svnBranch />
        </properties>
    </profile>
    <profile>
        <id>MON</id>
        <properties>
            <svnBranch>MON</svnBranch>
        </properties>
    </profile>
    <profile>
        <id>LOLA</id>
        <properties>
            <svnBranch>LOLA</svnBranch>
        </properties>
    </profile>
    <profile>
        <id>NBA</id>
        <properties>
            <svnBranch>NBA</svnBranch>
        </properties>
    </profile>
    <profile>
        <id>TEST</id>
        <properties>
            <svnBranch>TEST</svnBranch>
        </properties>
    </profile>
    <profile>
        <id>PROD</id>
        <properties>
            <svnBranch>PROD</svnBranch>
        </properties>
    </profile>
</profiles> 

プロジェクトA:

<parent>
    <groupId>com.myproject</groupId>
    <artifactId>pom</artifactId>
    <version>1.0.10</version>
</parent>

<artifactId>core-services</artifactId>
<version>1.1.0.41-SNAPSHOT</version>

プロジェクトB:

<parent>
    <groupId>com.mycompany</groupId>
    <artifactId>pom</artifactId>
    <version>1.0.10</version>
</parent>

<artifactId>olb-services</artifactId>
<version>1.1.0.41-SNAPSHOT</version>

<properties>
    <module.core-services.dependency.version>1.1.0.41-SNAPSHOT</module.core-services.dependency.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>core-services</artifactId>
        <version>${module.core-services.dependency.version}</version>
        <classifier>${svnBranch}</classifier>
    </dependency>
</dependencies>

プロジェクトC:

<parent>
    <groupId>com.mycompany</groupId>
    <artifactId>pom</artifactId>
    <version>1.0.10</version>
</parent>

<artifactId>nba-services</artifactId>
<version>1.1.0.41-SNAPSHOT</version>

<properties>
    <module.olb-services.dependency.version>1.1.0.41-SNAPSHOT</module.olb-services.dependency.version>
    <module.core-services.dependency.version>1.1.0.41-SNAPSHOT</module.core-services.dependency.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>olb-services</artifactId>
        <version>${module.olb-services.dependency.version}</version>
        <classifier>${svnBranch}</classifier>
    </dependency>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>core-services</artifactId>
        <version>${module.core-services.dependency.version}</version>
        <classifier>${svnBranch}</classifier>
    </dependency>
</dependencies>

各依存関係の分類タグで${svnBranch}を使用しても機能しません。プロジェクトBでは、プロジェクトCによって参照されている場合、プロパティ$ {svnBranch}は空ですが、親pomから取得されているように見えます。

4

1 に答える 1

2

Mavenでは、-D {activation.property}=valueまたは-P{profile.id/ s}を渡すことによってビルド時にのみアクティブ化できる場合、子pomの親レベルで定義されたプロファイルのみを使用できます。

プロファイルを継承できないため、親でプロファイルを定義して子pomでアクティブ化しようとすることはできません(例のように、子pomでアクティブ化しようとさえしていません)。

言い換えると、プロファイルがデフォルトでアクティブ化されていない限り、Mavenはそれを認識しません(あなたの場合、デフォルトですべてをアクティブ化したくなるかもしれませんが、一度にアクティブ化できるプロファイルは1つだけであることに注意してください)

問題は、TRUNKの$ {svnBranch}が子pomにのみ存在し、値がないことです。したがって、MavenはGAVにのみ作用し、分類子には作用しません。そしてそれを証明するためにあなたの子供の効果的なpom(mvnhelp:effective-pom)をチェックしてください。また、どのプロファイルがアクティブでどれがアクティブでないかを確認できます(mvn help:all-profiles)。

プロファイルを使用することが、あなたがしていることに最善のアプローチだとは思いません。より良い/より簡単なアプローチは、たとえば、親の通常のプロパティでブランチ名を宣言することです。

<properties>
 <svnBranch.lola>LOLA</svnBranch.lola>
 <svnBranch.nba>NBA</svnBranch.nba>
</properties>

その後、あなたの子供は必要に応じて使用します。

<dependencies>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>olb-services</artifactId>
        <version>${module.olb-services.dependency.version}</version>
        <classifier>${svnBranch.lola}</classifier>
    </dependency>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>core-services</artifactId>
        <version>${module.core-services.dependency.version}</version>
        <classifier>${svnBranch.nba}</classifier>
    </dependency>
</dependencies>
于 2013-03-28T11:31:20.577 に答える