首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle:多项目构建

Gradle:多项目构建
EN

Stack Overflow用户
提问于 2016-09-27 13:41:57
回答 1查看 331关注 0票数 0

因此,我有一个如下的项目结构

代码语言:javascript
复制
root
|-- module-1
|-- module-2
.
.
|-- module-n

我们正在查看的最后一个工件是来自所有模块的所有源的组合jar。我不确定这是否正确的方式。下面是我的构建脚本:

代码语言:javascript
复制
   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。

我只是想确认这是否是构建多模块项目的正确方法,如果不是,什么是正确的方法?以及如何解释模块间的依赖关系?

EN

回答 1

Stack Overflow用户

发布于 2016-09-27 17:35:23

您似乎在复制逻辑,因为每个模块都将.java编译为.class,但随后在聚合时又这样做了。如果是我,我会有以下模块

代码语言:javascript
复制
root
|-- module-1
|-- module-2
.
.
|-- module-n
+-- uber

uber模块中,我将使用shadow来聚合已编译的.class文件。您的uber/build.gradle可能如下所示

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39716792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档