Gradle,从每个源集中创建一个新的jar

Gradle,从每个源集中创建一个新的jar,gradle,Gradle,我有一个子项目,首先是我的文件 主要项目梯度文件: defaultTasks 'assemble' apply plugin: 'idea' allprojects { //this brings all the compiled entities to one directory archivesBaseName = "mybase" repositories { mavenCentral() } } subprojects { a

我有一个子项目,首先是我的文件

主要项目梯度文件:

defaultTasks 'assemble'
apply plugin: 'idea'

allprojects {
    //this brings all the compiled entities to one directory
    archivesBaseName = "mybase"

    repositories {
        mavenCentral()
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'scala'


    compileJava {
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
    }

    compileScala{
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
    }

    jar {
        manifest.attributes provider: 'MyProcJar'
    }

    assemble{
        archivePath = file("${rootDir}/dist")
    }

    ext {
        springVersion = "3.2.1.RELEASE"
        springSecurityWebVersion = "3.1.3.RELEASE"
        springSecurityOauth2Version = "1.0.1.RELEASE"
        jacksonCoreVersion = "2.1.2"
    }

    dependencies {
        testCompile 'junit:junit:4.11'
    }

    tasks.withType(AbstractArchiveTask){
        destinationDir = project.rootProject.file("dists")
    }
}
sourceSets {
    gwt-graphics {
        java {
            srcDirs = ["java"]
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }

    login-controls {
        java {
            srcDirs = ["java"]
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }

    sample-app {
        java {
            srcDirs = ["java"]
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }

}
子项目渐变文件:

defaultTasks 'assemble'
apply plugin: 'idea'

allprojects {
    //this brings all the compiled entities to one directory
    archivesBaseName = "mybase"

    repositories {
        mavenCentral()
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'scala'


    compileJava {
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
    }

    compileScala{
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
    }

    jar {
        manifest.attributes provider: 'MyProcJar'
    }

    assemble{
        archivePath = file("${rootDir}/dist")
    }

    ext {
        springVersion = "3.2.1.RELEASE"
        springSecurityWebVersion = "3.1.3.RELEASE"
        springSecurityOauth2Version = "1.0.1.RELEASE"
        jacksonCoreVersion = "2.1.2"
    }

    dependencies {
        testCompile 'junit:junit:4.11'
    }

    tasks.withType(AbstractArchiveTask){
        destinationDir = project.rootProject.file("dists")
    }
}
sourceSets {
    gwt-graphics {
        java {
            srcDirs = ["java"]
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }

    login-controls {
        java {
            srcDirs = ["java"]
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }

    sample-app {
        java {
            srcDirs = ["java"]
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }

}
我的项目布局

mainproj/gwt/src/gwt-graphics/java:
mainproj/gwt/src/login-controls/java:
mainproj/gwt/src/sample-app/java:
在我的子项目中,我希望将sourceset的每个元素编译成一个单独的jar文件。我该怎么做?目前我甚至无法编译任何内容。

您应该为源代码集使用有效(Groovy)标识符,并将它们指向正确的源代码目录:

sourceSets {
    gwtGraphics {
        srcDirs = ["gwt-graphics/java"]
    }
}
java
插件只为
main
源代码集添加了一个
jar
任务。您可以添加自己的,可以逐个添加,也可以通过在
sourceset.all上“循环”添加。有关更多信息,请参见完整渐变分布中的或示例

其他一些提示:

  • 与直接配置
    sourceSet.compileClasspath
    sourceSet.runtimeClasspath
    不同,您可以执行
    依赖项{gwtGraphicsCompile sourceSet.main.output}
    等操作。这样,您就不需要对运行时类路径重复相同的配置
  • 您可以全局设置它,而不是为每个编译任务设置源/目标兼容性(例如,
    sourceCompatibility=1.7
  • 由于继承了额外的属性,我将
    ext
    块移出
    子项目

很好,谢谢。我到家后会试试的。你知道有没有一个项目在gradle完成了一个相当复杂的构建系统,我可以用它作为进一步研究的例子?感谢Spring、Gradle、Spock、Geb,全部Gradle分布中的样本。