web-dev-qa-db-ja.com

Mavens依存関係宣言分類子プロパティの目的は何ですか?

私はpom.xmlファイルを持っていますが、それらは同じ<artifactId>で参照される3つの依存関係であることがわかります。違いはタグにあります

<classifier>sources</classifier>
<classifier>javadoc</classifier>

SOURCES/JAVADOCを持つ依存関係を削除し、1つの依存関係のみを保持しました。私は自分のアプリケーションをテストしましたが、すべてがうまくいきました。

この分類タグを使用する目的は何ですか? <classifier>タグにSOURCES/JAVADOCを追加するために依存関係を2回複製する必要がある理由.

<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   <scope>compile</scope>
</dependency>
  <dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
      ***<classifier>javadoc</classifier>***
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   ***<classifier>sources</classifier>***
   <scope>compile</scope>
</dependency> 
66
pushya

分類子は、同じPOMから構築されたもののコンテンツが異なるアーティファクトを区別します。オプションの任意の文字列で、存在する場合は、バージョン番号の直後にアーティファクト名に追加されます。

ソース

52
Biswajit

classifierの有用性をよりよく理解するのに役立つ例による、さらにもう1つの実用的な答え。

アーティファクトの2つのバージョンが必要だとします:openjpaeclipselinkの場合-たとえば、jarにはJPA実装の強化に特に必要なエンティティが含まれているためです。

Mavenプロファイルで定義されたこれらのビルドの処理が異なる場合があり、使用されるプロファイルには<classifier />プロパティもあります。

別に分類されたバージョンを構築するには、pommaven-jar-pluginを次のように構成します

<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>3.0.2</version>
   <configuration>
       <classifier>${classifier}</classifier>
   </configuration>
</plugin>

両方をインストールすると、リポジトリ内のファイルは次のようになります。

org/example/data/1.0.0/data-1.0.0.pom
org/example/data/1.0.0/data-1.0.0-openjpa.jar
org/example/data/1.0.0/data-1.0.0-eclipselink.jar

これで、使用するのはclassifierだけになるので、

<dependency>
   <groupId>org.example</groupId>
   <artifactId>data</artifactId>
   <version>1.0.0</version>
   <classifier>[openjpa|eclipselink]</classifier>
</dependency>
5
pirho

分類子の例
この要素の動機として、たとえば、JRE 1.8をターゲットとするアーティファクトを提供すると同時に、JRE 1.7をまだサポートするアーティファクトを提供するプロジェクトを検討してください。クライアントが使用するものを選択できるように、最初のアーティファクトに分類子jdk18を装備し、2番目のアーティファクトにjdk14を装備することができます。

分類子のもう1つの一般的な使用例は、プロジェクトのメインアーティファクトにセカンダリアーティファクトを添付する必要があることです。 Mavenセントラルリポジトリを参照すると、分類子ソースとjavadocが、パッケージ化されたクラスファイルとともにプロジェクトソースコードとAPIドキュメントをデプロイするために使用されていることがわかります。

同じPOMに属しているが、ビルドが異なる2つのアーティファクトを区別でき、バージョンの後にファイル名に追加されます。

たとえば、リポジトリに他のアーティファクト(ドキュメント、ソースなど)がある場合、それらを参照し、依存関係としてプロジェクトに追加できます。このコードでは、<classifier>sources</classifier>を追加して、リポジトリからsources.jarを取得しています。

    <dependency>
    <groupId>oauth.signpost</groupId>
    <artifactId>signpost-commonshttp4</artifactId>
    <version>1.2.1.2</version>
    <type>jar</type>
    ***<classifier>sources</classifier>***
    <scope>compile</scope>
    </dependency> 

実際には、さらに詳細なレベルで依存関係を見つけることができます。

1
Mr.Q

次によると: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ 分類タグには「セカンダリアーティファクト」が含まれます、その「推移的な依存関係」は遮断されます!したがって、分類子タグは$ artifactId- $ version- $ classifier.jarによって「Maven Coordinate」を変更するだけではありません。

0
Zhu Fei