製品の主要な成果物 (インストーラー) を生成する Gradle ビルドがあります。これをモデル化する Gradle プロジェクトには、さまざまな構成でさまざまな依存関係があります。これらの依存関係の多くは、外部モジュールの既定の構成にあり、これらのモジュールの一部にtestResults
は、テスト タスクの (圧縮された) 結果を含む構成があります。
すべての依存関係のテスト結果が存在する場合は、主要な製品ビルドの成果物として公開することが重要です (テストが行われ、成功したという証拠として使用するため)。それらが存在しなくても問題ありません。
製品ビルドのすべての構成を反復し、それぞれの依存関係を反復し、プログラムで作成された依存関係を (この目的のために作成された新しい構成で)testResults
モジュールの構成に追加することで、これを実行しようとしました。
つまり、次のような依存関係を作成します。
def processDependencyForTests( Dependency dependency ) {
def testResultsDependency = [
'group' : dependency.group,
'name' : dependency.name,
'version' : dependency.version,
'configuration' : 'testResults'
]
project.dependencies.add 'allTestResults', testResultsDependency
これはその構成を問題なく取り込みますが、もちろん、それを使って何かをしようとすると、実際には構成を持たないモジュールへの依存関係に初めて遭遇したときに失敗しtestResults
ます:
def resolvedConfiguration = configurations.allTestResults.resolvedConfiguration
結果は次のようになります。
Build file 'C:\myproduct\build.gradle' line: 353
* What went wrong:
Execution failed for task ':myproduct:createBuildRecord'.
> Could not resolve all dependencies for configuration ':myproduct:allTestResults'.
> Module version group:mygroup, module:myproduct, version:1.2.3.4, configuration:allTestResults declares a dependency on configuration 'testResults' which is not declared in the module descriptor for group:mygroup, module:mymodule, version:1.0
代わりに、宣言的な方法で依存関係を明示的にリストすることは実際には実用的ではありません。なぜなら、「製品プロジェクトに実際にある依存関係が何であれ」から派生させたいからです。
そのような予想される不足している構成がビルドを狂わせないようにするにはどうすればよいですか? 寛大な構成と関係があることが答えかもしれないと思いましたが、ここまではまだ到達していません (私ResolvedConfiguration
が知る限り、最初に取得する必要があります)。または、これを行う方法が正気でない場合、これを達成するためのより自然な Gradle イディオムは何ですか?