2016-12-19 20 views
0

この問題は本当に謎のようです。私たちはSpring RESTアプリケーションに取り組んでいます。私のチームでは、Jenkinsにすべてのチェックインのビルドを実行させました(CIビルド)。さらに、毎晩行われる正式なビルドもあります。いくつかの統合テストは、最近CIビルド中に失敗し始めました。そして、私たちはjarの競合の原因を追跡しました。しかし、これらの競合を早期に引き起こした推移的な依存関係や、正式なビルドや、チームの一部の開発者にとっては、それでもまだ当てはまりました。他の人にとってはもはやそれはありません。同じGradleファイル、同じコードベース、異なる開発者の依存関係グラフ

私たちは同じコードベースと同じGradleファイルを持っています。私のシステムで依存関係タスクを実行すると、あるサブプロジェクト(Jenkinsマシンと同じように)に過渡的な依存関係の長いツリーがありますが、他のツリーはありません。さらに、WARのサイズは、いくつかの開発者にとって、他のものよりも数オーダー大きくなります。移行の依存関係は、Nexusにアップロードされた別の関連プロジェクトからのものです。

私はマシンとJenkinsマシンの両方で依存関係をリフレッシュしました。さらに、.gradleを一掃しましたが、役に立たなくなりました。

環境のように聞こえますが、GradleバージョンとJavaバージョンはほぼ同じです。

この不一致の原因となる考え方について教えてください。

答えて

0

あなたが軒並み特定のバージョンに

def gsonModule = 'com.google.code.gson:gson' 
configurations.all { 
    resolutionStrategy { 
     // add dependency substitution rules 
     dependencySubstitution { 
      substitute module(gsonModule) with module("$gsonModule:2.6.1") 
     } 
    } 
} 

// note: configurations block must be above the dependencies 
// or build will error 
dependencies { 
    compile "$gsonModule:2.7" 
} 

をあなたの依存関係を強制することができそして、すべての開発者/ CI /テスト/ CDは、すべてのコンパイル間であなたのresolutionStrategy力の一貫性を構築する際に実行されます。 gradleのデフォルトの動作はバージョンの競合時に新しいバージョンが使用されます。これにより、宣言されたバージョンに関係なく、すべてのバージョンが同じになります。

$ ./gradlew dependencies --configuration compile -q 

------------------------------------------------------------ 
Root project 
------------------------------------------------------------ 

compile - Dependencies for source set 'main'. 
\--- com.google.code.gson:gson:2.7 -> 2.6.1 

参考:https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

0

あなたはそれが要因であることのいくつかの可能性を排除するために、全体で同じGradleのバージョンを確認するためにGradleのラッパーを使用する必要があります。

さらに、--refresh-dependenciesをgradleコマンドラインに追加します。依存関係の一部が正しくバージョン管理されていない可能性があります。このフラグは最新のものだけが取得されるたびに検証されます。

最後に、結果が異なるワークステーションを見て、gradleユーザーのホームフォルダとプロジェクトフォルダに同じgradle.propertiesがあることを確認してください。

0
まず

、迅速な対応に感謝しますが、私は更新があります。一言で言えば、私の同僚の1が問題の一つを特定し

を。詳細はわかりませんが、グラデルファイルには、Nexusの別のプロジェクト(上記の関連プロジェクトなど)をダウンロードするか、ローカルに構築されたアーティファクトを使用するための便利な機能があります。

後者の方が問題を解決します。 Nexusからダウンロードすると(Jenkinsがやったように)、問題が発生して公開されます。私はこれがビルドオーダーに影響するとは信じませんが、引っ張られる推移的な依存関係に影響します。

また、さまざまなサブプロジェクトの依存関係にいくつかの問題があります。依存関係を持たないことを意図したプロジェクトの1つがあり、それは過渡的な依存関係を引き起こす大きな原因です。その基本プロジェクトが他のプロジェクトによって引き込まれると、波及効果があります。これらの依存関係ブロックのいくつかはクリーンアップする必要があります。

再び、ありがとうございました!

関連する問題