2016-09-27 16 views
0

を構築し、私たちが見ている、最終的な成果物は、すべてのモジュールからのすべてのソースの組み合わせ瓶であるのGradle:マルチプロジェクトが

root 
|-- module-1 
|-- module-2 
. 
. 
|-- module-n 

を次のようにだから私は、プロジェクトの構造を有しています。これが正しい方法かどうかはわかりません。新しいモジュールが

plugins { 
     id "com.github.johnrengelman.shadow" version "1.2.3" 
    } 

    group = 'com.root' 
    version = System.getenv('BUILD_NUMBER') ?:'1.0-SNAPSHOT' 
    apply plugin: 'java' 
    sourceCompatibility = 1.8 

    configurations { providedCompile } 

    repositories { 
     mavenLocal() 
     mavenCentral() 
    } 

    def sparkVersion = '2.0.0' 
    def scalaMajorVersion = '2.11' 

    sourceSets { 
     main { 
      java { 
       srcDirs = ['module1/src/main/java', 'module2/src/main/java'] 
      } 
     } 
    } 

    dependencies { 
     compile group: 'org.scala-lang', name:'scala-compiler', version:'2.11.8' 
     compile group: 'org.apache.kafka', name: 'kafka-clients', version: '0.9.0.0' 
     compile group: 'org.apache.spark', name: "spark-streaming-kafka_$scalaMajorVersion", version: '1.6.2' 
     compile group: 'org.apache.spark', name: "spark-streaming_$scalaMajorVersion", version: "$sparkVersion" 
     compile group: 'org.apache.spark', name: "spark-catalyst_$scalaMajorVersion", version: "$sparkVersion" 
     compile group: 'com.google.code.gson', name: 'gson', version: '2.7' 
     compile group: 'org.apache.zookeeper', name: 'zookeeper', version: '3.4.9' 
     providedCompile group: 'org.apache.spark', name: "spark-core_$scalaMajorVersion", version: "$sparkVersion" 
     providedCompile group: 'org.apache.spark', name: "spark-sql_$scalaMajorVersion", version: "$sparkVersion" 
     testCompile group: 'junit', name: 'junit', version: '4.11' 
    } 

    build.dependsOn(shadowJar); 

    shadowJar { 
     zip64 true 
    } 

    sourceSets.main.compileClasspath += configurations.providedCompile 
    sourceSets.test.compileClasspath += configurations.providedCompile 
    sourceSets.test.runtimeClasspath += configurations.providedCompile 

    artifacts { 
     archives file: shadowJar.archivePath, builtBy: shadowJar 
    } 

だから我々は単に追加されsourceSetsが追加されます。 はここに私のビルドスクリプトです。

これは正しい方法ではないにしても、これがマルチモジュールプロジェクトを構築する正しい方法かどうかを確認したかっただけです。モジュール間の依存関係をどのように考慮に入れるか?

答えて

0

各モジュールは.java.classをコンパイルするので、論理を複製するように見えますが、集計するときに再度実行します。それは私だったら、私は以下のモジュール

root 
|-- module-1 
|-- module-2 
. 
. 
|-- module-n 
+-- uber 

そして、私はコンパイル.classファイルを集約するshadowを使用したいuberモジュールを持っていると思います。 uber/build.gradleは、

apply plugin: 'com.github.johnrengelman.shadow' 
apply plugin: 'java' 

dependencies { 
    runtime project(':module-1') 
    runtime project(':module-2') 
    runtime project(':module-N') 
} 

shadowJar { 
    baseName = 'foo' 
    classifier = 'bar' 
    version = project.version 
} 
+0

のように見えるので、すべてのモジュールに独自のグラデーションファイルがありますか?はいの場合、どのように見えますか? – eatSleepCode

+0

達人とは異なり、Gradleのはこのことを規定していません。あなたは、単一のファイル内のすべてのモジュール、別のファイル内の各モジュールまたはその両方の組み合わせを持つことができます。私はあなたがマルチモジュールビルドでのgradleのドキュメントを読むことをお勧めします –

関連する問題