2016-10-10 7 views
0

私は単純なマルチモジュールプロジェクトを持っており、そこから配布を作成したいと考えています。私はおおよそのディストリビューションは、各モジュールについてアーティファクトを使用してビルド成果物をカスタム構成に分割して配布する方法

foo/ 
bar/ 
baz/ 

ようになりたいと思い、私は彼らの成果物(および依存関係が)ディストリビューションでfoobar、またはbazディレクトリのいずれかに入ることを宣言したいと思います。

明白なことは動作していないように見えますが、Gradleのドキュメントはどれくらい正確にartifacts + configurationsで動作しているのか不明なので、間違ったことは分かりません。

私はルートbuild.gradle

configurations { 
    foo 
    bar 
    baz 
} 

に続いてmoduleAで、私はそのアーティファクトのために入れている:

artifacts { 
    foo jar 
} 

というように、各モジュールのために、その成果物を所望の形状に設定されています。

私はconfigurations.each {c -> println(c.name) }たalaそれらをプリントアウトする場合、これらの構成が記載されていますので、それらを正しく作成しているが、私は私のカスタム構成のfilesまたはallArtifactsを反復処理しようとした場合、彼らは空です。

dependencies { 
    foo "com.mypackage.group:module:1.0" 
} 

をして、別のモジュールをbarため、および他のbaz用など:

私は以前にその依存関係のように記載されていることになる補助的なモジュールを作成することによって、このような何かをしたいです。これはうまくいくようでしたが、維持するのは面倒でした。アーティファクトと一緒にカスタム構成を使用することは、これに対してより保守的な解決策のようでした。私はあなたがgetArtifacts()

に興味を持っていると思う

答えて

1

は、ここでの例です

// generated with gradle init --type java-library 
apply plugin: 'java' 

repositories { 
    jcenter() 
} 

dependencies { 
    compile 'org.slf4j:slf4j-api:1.7.21' 
    testCompile 'junit:junit:4.12' 
} 

configurations { 
    foo { 
     extendsFrom compile 
    } 
} 

artifacts { 
    foo jar 
} 

task showMe << { 
    println "Files:" 
    configurations.foo.files.each { println " $it" } 
    println "Artifacts: " 
    configurations.foo.artifacts.each { println " $it" } 
} 

出力:

:showMe 
Files: 
    /home/alpar/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.21/139535a69a4239db087de9bab0bee568bf8e0b70/slf4j-api-1.7.21.jar 
Artifacts: 
ArchivePublishArtifact_Decorated alpar:jar:jar: 

あなたは潜在的に(直接プロジェクトのタスクを参照することにより、さらに多くのことを簡素化することができfoo barなどがプロジェクトであることを考慮して)

task distribution(type: Zip) { 
    from project(':foo').jar { into "foo" } 
} 

略して

task distribution(type: Zip) { 
    ('foo', 'bar').each { p -> 
     from project(":$p").jar { into p } 
    } 
} 

PublishArtifactは、接続するのが簡単ではないため、Zipタスクで使用することはできませんでした。

サブプロジェクトにさらに自己完結させるために、タスクの名前に定義されたカスタムパラメータを持つすべてのサブプロジェクトをループすることもできます。

完全にクリーンアップした後、または新しくチェックアウトしてもタスクが動作するようにするには、いくつかの依存関係も含めてください。

関連する問題