2012-12-08 3 views
9

複数のプロジェクトを1つのjarに格付けできますか?複数のプロジェクトを1つのjarにまとめることはできますか?

私はあなたがこのようなメソッドを使用して、単一のプロジェクトのためにそれを行うことができます知っている:

task packageTests(type: Jar) { 
    from sourceSets.test.classes 
} 

しかし、どのように人が1瓶に複数のサブプロジェクトをアップジップん?

私はこれを試してみましたが、それは動作しません:

task packageTests(type: Jar) { 
    from project(':core').sourceSets.main.classes 
    from project(':core:google').sourceSets.test.classes 
    from project(':core:bing').sourceSets.test.classes 
} 
+0

を使用でき、[fatJar(https://github.com/musketyr/gradle-fatjar-plugin) ](http://gradle.org/docs/current/userguide/application_plugin.html)。 –

+0

これら3つのプロジェクトはすべて1つのプロジェクト固有です。それらの誰もルートプロジェクトとそのすべてのサブプロジェクトを解凍することはありません。 – djangofan

+0

これらはすべて、プロジェクトが適用したモデルに基づいて動作し、他のモデルは依存関係として動作します。 –

答えて

6

はここで少し単純である私の解決策、です:

// Create a list of subprojects that you wish to include in the jar. 
def mainProjects = [':apps',':core',':gui',':io'] 
task oneJar(type: Jar , dependsOn: mainProjects.collect{ it+":compileJava"}) { 
    baseName = 'name of jar' 
    from files(mainProjects.collect{ project(it).sourceSets.main.output }) 
} 

コードはGradleの1.12でテストされています

+0

これはまだgradle 3.1で動作します。 – ndtreviv

7

これは、あなたがやりたいことのために働く必要があります。これは、root gradleビルドファイルになければなりません。

subprojects.each { subproject -> evaluationDependsOn(subproject.path)} 

task allJar(type: Jar, dependsOn: subprojects.assemble) { 
    baseName = 'your-base-name' 
    subprojects.each { subproject -> 
     from subproject.configurations.archives.allArtifacts.files.collect { 
     zipTree(it) 
     } 
    } 
} 

あなたはアーカイブとしてそれを追加することで、これを公開することができます:

artifacts { 
    archives allJar 
} 
+0

この回答はほとんど私の質問に答えた。それは私に試みたアイデアの数が多かったが、決して解決しなかった。 gradleコンパイラは私にエラーを与えます:プロジェクトでプロパティ 'アセンブル'を見つけることができませんでした。私は様々な方法でそれを回避しようとしましたが、できませんでした。私はGradle 1.2を使用しています。私はまだ期待していて、まだ試しています。 – djangofan

+0

Gradleのドキュメントをお試しください。あなたがコピーアンドペーストのようなもので、何も動作していないようです。 'assemble'は、Javaプラグインが提供するプロパティです。あなたのサブプロジェクトのいずれかがjavaプラグインを持っていない場合は、あなたが言及したエラーを取得します。 –

+0

"allprojects"セクションにjavaプラグインを追加しました。それは私のすべてのサブプロジェクトで使えないのですか?いずれにしても、私は不平を言っていたプロジェクトにJavaプラグインを追加しましたが、それは助けになりませんでした。私はもっ​​と良い助けを得るために今夜GitHubの簡単な例を入れようとします。 – djangofan

3

以下の解決策はCaTalyst.Xで提案されたものと非常に似ていますが、jarタスク。

subprojects.each { subproject -> evaluationDependsOn(subproject.path) } 
jar.dependsOn subprojects.tasks['classes'] 
jar { 
    baseName = 'MyApp' 
    manifest { 
    attributes 'Main-Class': 'org.abc.App' 
    } 
    subprojects.each { subproject -> 
    from subproject.sourceSets.main.output.classesDir 
    from subproject.sourceSets.main.output.resourcesDir 
    } 
} 

、OneJar、または[アプリケーションのzipをそれのGradle 2.1に対して試験し2.2.1