0

ライブラリがv3.0.1 を使用して、たとえばservlet-apiに対する提供された依存関係を宣言する場合。ユーザーがサードパーティの Web アプリケーションで使用されるライブラリにバージョン 2.5 を使用することは可能ですか?

言い換えると:

mylib (srv 3.0.1)  <-- some_framework(srv 2.5)  <--  user_webapp (tomcat 6 or 7)

さらに、v2.5 はjavax.servlet:servlet-api:2.5として宣言され、バージョン v3.0.1 はjavax.servlet:javax.servlet-api:3.0.1として宣言されているため、違いがあります。

some_frameworkが、mylib で提供されている定義 (3.0 など) とは異なる servlet-api 依存関係 (2.5 など) を指定することは問題になりますか? スコープが提供されている(そしてコンパイル時にのみ利用可能である)ので、依存関係ツール(mvn、gradle ...)はsome_frameworkでそれをダウンロードせず、依存関係を手動で宣言する必要がある(そして許可されている)と思います。

(ええ、私は 3.0 と 2.5 の違いを認識していますが、それは問題ではありません。また、すべてが正しくコンパイルされると想定しています。また、maven がsome_frameworkをどのようにコンパイルするのか、依存関係: 2.5 または 3?) に興味があります。

4

1 に答える 1

0

[SO]はトリッキーなものを助けたことがないので、私自身の質問に答えさせてください:)

シンプルな Maven プロジェクトを作成しました (これはsome_frameworkとして機能します)。サーブレット 3.0.1 が提供されたjodd-servlet依存関係としてリストされている( mylib ) に依存します。私が走るとき

mvn dependency:resolve

依存関係のリストにサーブレットが表示されません。ここで、現在のプロジェクト (つまりsome_framework ) がサーブレット v2.5 を依存関係としてリストしている場合。その後、同じコマンドを再度実行すると、2.5 への依存関係のみが表示されます。

したがって、提供された依存関係は透過的でもエクスポートされていないとも言えます。

于 2013-05-14T21:29:56.533 に答える