web-dev-qa-db-ja.com

Mavenには依存関係バージョンをプロパティとして取得する方法がありますか?

BOMを使用して、別のプロジェクトからマイニングに依存関係をインポートしています。そのBOMで既に宣言されている依存関係のバージョンを参照する方法が必要です。これまで、依存関係のバージョンをBOMのプロパティとしてリストしようとしましたが、プロパティがBOMとともにインポートされないため、このアプローチは失敗します。

依存関係プラグインの dependency:properties ゴールがほぼ必要なことを正確に実行する場所を見てきましたが、アーティファクトのフルパスを提供する代わりにプロパティとしてバージョンが必要です。解決されたアーティファクトのバージョンをプロパティとして提供できるものはありますか?

UPDATE- '親pomを使用しないのはなぜですか?'

私は通常、提供される依存関係がBOMアーティファクトで指定されているアプリケーションサーバー環境で作業していることに気付きます(これは、相互に関連するアーティファクトのグループを配布するための一般的/標準的な方法になっているようです。つまり、 widlfly =)。そのため、BOMを唯一の正しい情報源として扱いたいと思います。 re-delcaringのようなことを行うという考えは、BOMですでに定義されている依存関係バージョンプロパティが正しくないようです。

アプリケーションサーバーの環境をミラーリングした親pomでプロパティを定義する場合、親pomプロパティとBOMプロパティの同期を維持することを心配する必要があります-なぜその時点でBOMを持っているのですか?

情報は依存関係ツリーですでに利用可能です、それはそれを公開するだけの問題です...

12
josh-cain

このための既存のMavenまたはプラグイン機能が見つからなかったため、古いdependencypath-maven-pluginをフォークし、バージョンを使用するように変更しました。これで、次のようなプラグインをドロップできます。

<build>
   .
   .
    <plugins>
        .
        .
        <plugin>
            <groupId>io.reformanda.semper</groupId>
            <artifactId>dependencyversion-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <id>set-all</id>
                    <goals>
                        <goal>set-version</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

そして、次のようなプロパティにアクセスします。

groupId:artifactId:type [:classifier] .version

I.E.

io.undertow:undertow-core:jar.version = 1.3.15.Final

プラグインの使用方法の詳細については、 [〜#〜] readme [〜#〜] を確認してください。 @ Maven Central で利用可能です:

<dependency>
    <groupId>io.reformanda.semper</groupId>
    <artifactId>dependencyversion-maven-plugin</artifactId>
    <version>1.0.0</version>
</dependency>

...プラグインはずっと下に...

11
josh-cain

簡単な答え-はい、できます。

詳細には、ルートpom.xml:

<properties>
    <slf4j.version>1.7.21</slf4j.version>
</properties>
...
<dependencyManagement>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    ...
</dependencyManagement>

モジュールpom.xmlの場合:

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    ...
</dependencies>

また、$ {slf4j.version}値を使用して、リソースをフィルタリングしたり、プラグイン構成で使用したりすることもできます。

更新

親POMでプロパティを使用できない場合は、次のいずれかを実行できます。

  • dependency:list プラグインを使用して、すべての依存関係とそのバージョンを取得します。または
  • 依存関係:リスト+ antrun:runプラグインを一緒に使用します。または
  • cIサーバースクリプトを構成して、それを実行します(例: this example);または
  • バージョンロジックを処理するカスタムプラグインを作成します。
4
ursa

このMavenプラグインはGithub( https://github.com/semper-reformanda/dependencyversion-maven-plugin )にあり、たとえばWebjarsの依存関係を使用する場合など、依存関係のバージョンを扱うすべての人にとって必須です。 -Webjarのバージョン番号をWebリソースに直接挿入できます。

私は長い間そのような機能を探していましたが、もっと多くの人がそれに出くわし、Mavenセントラルで起動することを願っています(実際にはMavenに付属しているはずです)

1
Brice