問題タブ [transitive-dependency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Gradle: プロジェクト ソースで推移的な依存関係を使用できないようにする
Java 8 を使用するプロジェクトjoda-time
では、プロジェクト依存関係の推移的な依存関係です。プロジェクト ソースでのjava time
代わりにの使用を強制したい。クラスをgradleプロジェクトのプロジェクトソースで使用するように制限するにjoda-time
はどうすればよいですか?joda-time
maven - Maven を 2.2.1 から 3.2.5 にアップグレードした後の推移的な依存関係の違い
会社のインフラストラクチャが変更されたため、Maven 2.2.1 から Maven 3.0.5 へのアップグレードが必要になりました
私のプロジェクトの構造は、いくつかのモジュールを含む 1 つの EAR です。EAR の依存関係はlib
、クラスパス上にあるそのフォルダーに格納され、すべてのモジュールがそれを使用できます。複数のモジュールで使用される依存関係がある場合、スコープ内compile
およびprovided
それを必要とするモジュールのスコープ内で EAR の依存関係として追加されます。このようにして、ファイルは二重になりません。
アップグレード後、スコープprovided
のある依存関係は別の方法で処理されます。それらの推移的な依存関係は、モジュールの lib フォルダーに追加されます。これにより、競合が発生します。
いくつかの調査の結果、提案された解決策を見つけました - maven-dependency-plugin を<excludeScope>provided</excludeScope>
during<goal>copy-dependencies</goal>
に設定しますが、何も変わりません -lib
とにかく一時的な依存関係がモジュールのフォルダに追加されます。
問題を間違って理解していますか?これを引き起こすmaven 2と3の間で何が変わったのですか?
よろしく、 ヤン
面倒なモジュールのプラグイン構成:
gradle - Can Gradle read transitive dependencies from pom.xml contained in local JAR files?
Unlike external dependencies (from Maven, Ivy, etc.) local JAR files usually do not provide a list of transitive dependencies for Gradle. Unless they theoretically do in form of files pom.xml
and pom.properties
in directory META-INF/maven/<groupId>/<artifactId>
. As far as I understand these are the same files Maven uses to provide transitive dependencies for an artifact.
So I wonder if Gradle is somehow able to read these transitive dependencies from a local JAR file as if the local JAR was an external dependency. Only adding the local JAR as dependency seems to ignore the embedded pom.xml
.
Use case: I am writing an Plugin API JAR for an internal product which should be used by our developers to develop plugins. The API JAR has some external dependencies (Hibernate Annotations in domain classes, dom4j, stuff like that) and it would be great if the developer wouldn't have to define these dependencies by himself (they could change with newer API version). I also don't want to create a fat JAR containing all dependencies because a) the size! and b) it would not contain the sources of the external dependencies.
java - Gradle はどうにかして瓶地獄を解決するのに役立ちますか?
Java 8 はこちら。
次のように定義されたクラスを持つ、widget
Maven 座標を持つライブラリの古いバージョンがあるとします。widgetmakers:widget:1.0.4
年が経ちます。このwidget
ライブラリの管理者は、 aWidget
は決してmeow
ではなく、実際には であるべきであると判断していbark
ます。そのため、Maven 座標widgetmakers:widget:2.0.0
を使用しWidget
て次のような新しいリリースが作成されます。
それでは、アプリをビルドしmyapp
ます。そして、すべての依存関係の最新の安定したバージョンを使用したいので、依存関係を次のように宣言します (内build.gradle
):
ここで、この (架空の)fizzbuzz
ライブラリが常にwidget
ライブラリの 1.x バージョンに依存しているとしWidget
ましょうmeow
。
widget
そのため、コンパイル クラスパスで の 2 つのバージョンを指定しています。
widgetmakers:widget:1.0.4
これは、fizzbuzz
ライブラリの依存関係としてライブラリによって取り込まれます。とwidgetmakers:widget:2.0.0
私が直接参照している
Widget
したがって、明らかに、最初にクラスロードされる のバージョンに応じて、Widget#meow
または のいずれかになりますWidget#bark
。
Gradle は、ここで私を支援するための機能を提供していますか? 同じクラスの複数のバージョンを取り込みfizzbuzz
、古いバージョンの を使用するようにクラスを構成Widget
し、新しいバージョンを使用するように私のクラスを構成する方法はありますか? そうでない場合、私が考えることができる唯一の解決策は次のとおりです。
- ある種のシェーディングおよび/またはファットジャーベースのソリューションを達成できるかもしれません。おそらく、すべての依存関係をパッケージとして取り込み、
myapp/bin
異なるバージョンプレフィックスを付けます。確かに、ここで明確な解決策はわかりませんが、何かが実現可能であると確信しています(ただし、完全にハック/厄介です)。または... - 依存関係グラフ全体を注意深く調べて、すべての推移的な依存関係が互いに競合していないことを確認してください。この場合、これは
fizzbuzz
メンテナーにプルリクエストを送信して最新widget
バージョンにアップグレードするか、残念ながらダウングレードmyapp
して古いwidget
バージョンを使用することを意味します。
しかし、Gradle (これまでのところ) は私にとって魔法のようなものでした。だから私は尋ねます:ここで私を利用できるGradleマジックはありますか?
android - バック: 推移的な依存関係
メイン プロジェクト A (APK) は、サブ プロジェクト B (AAR) に依存します。A と B の両方が C (AAR) に依存しています。問題は C が 2 回含まれていることです。
"values.xml:XXX: エラー: 属性 "YYY" は既に定義されています"
最終的な APK から一時的な依存関係 C を除外するにはどうすればよいですか?
プロジェクト A:
サブプロジェクトB
Cは「appcompat-v7.aar」です。
注: A は「A/libs」に C を含み、B は「B/libs」に C を含みます。