1

私が最初にIvyを使い始めたとき、私は構成について尋ねました、そしてその主題に関するLightguardのブログ投稿を指摘されました。とても参考になりました。しかし、私は今、この投稿(および他の人)が持っている提供された構成について質問があります。構成アイテムは次のようになります。

<conf name="provided" 
    visibility="public" 
    description="this is much like compile, but indicates 
         you expect the JDK or a container to provide it. 
         It is only available on the compilation classpath, 
         and is not transitive."/>

パラメータを分割したdescriptionので見やすくなりました。「そして推移的ではない」と書かれていることに注意してください。

providedIvyは、構成が推移的ではないことをどのようにして知るのですか?transitive="false"構成にパラメーターがありません。これは、この構成がMavenリポジトリーと相互作用して非推移的になる方法が原因ですか?それとも、これは誰もが1つのブログから別のブログにコピーした小さな不具合ですか?

4

1 に答える 1

2

ivy構成の説明は、 Mavenドキュメントの対応するスコープの説明を反映することを目的としていると思います。

提供された

これはコンパイルによく似ていますが、実行時にJDKまたはコンテナが依存関係を提供することを期待していることを示しています。たとえば、Java Enterprise Edition用のWebアプリケーションを構築する場合、サーブレットAPIおよび関連するJava EE APIへの依存関係を、提供されたスコープに設定します。これは、Webコンテナがこれらのクラスを提供するためです。このスコープは、コンパイルおよびテストクラスパスでのみ使用可能であり、推移的ではありません

ivyがこのスコープをivy構成マッピングに変換する方法については、「提供された」スコープ依存関係を含むMavenモジュールをダウンロードして確認する必要があります。

アップデート

ivyは、Mavenでスコープがどのように機能しているかの変換を実行することを覚えておく必要があります。モジュールの例は次のとおりです。

そのPOMには、ivyによって次のivy依存関係に変換される2つの「提供された」スコープ依存関係が含まれています。

<dependency org="org.eclipse.jetty" name="jetty-webapp" ... conf="provided->compile(*),provided(*),runtime(*),master(*)"/>
<dependency org="org.eclipse.jetty.orbit" name="javax.servlet" ... conf="provided->compile(*),provided(*),runtime(*),master(*)"/>

重要な点は、これらの依存関係のどちらも次のツタの構成にマップされていないということです。

  • デフォルト
  • コンパイル

これは、 jetty-servletsに対する依存関係を宣言するときに、推移的な依存関係としてプルダウンされないことを意味します。

アップデート

Mavenモジュールをダウンロードするとき、ivyはリジッドスコープシステム間で同じ操作を模倣するivy構成への変換を実行します。したがって、モジュールで次の構成マッピング「provided-> default」を宣言するとリモートモジュールの「コンパイル」依存関係をローカルの「provide」構成にプルダウンします(「コンパイル」スコープはMavenのデフォルトであり、ツタに翻訳されたMavenモジュールでも)。

リモートの「提供された」依存関係を取得するには、「提供された」->提供された」を指定する必要があります。これはivyを使用して可能ですが、Mavenモジュールでサポートされている操作ではありません。

于 2012-10-22T19:53:11.607 に答える