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

时间:2013-04-08 03:10:09

标签: gradle

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

主要项目gradle文件:

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")
    }
}

子项目gradle文件:

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文件。我怎么做?目前我甚至无法编译任何东西。

1 个答案:

答案 0 :(得分:2)

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

sourceSets {
    gwtGraphics {
        srcDirs = ["gwt-graphics/java"]
    }
}

java插件仅为jar源集添加main任务。您可以逐个添加,也可以在sourceSets.all上“循环”。有关详细信息,请参阅Gradle Build Language Reference或完整Gradle分布中的示例。

其他一些提示:

  • 您可以执行sourceSet.compileClasspath等,而不是直接配置sourceSet.runtimeClasspathdependencies { gwtGraphicsCompile sourceSets.main.output }。然后您不需要为运行时类路径重复相同的配置。
  • 您可以全局设置(例如sourceCompatibility = 1.7),而不是为每个编译任务设置源/目标兼容性。
  • 由于继承了额外的属性,我会将ext块移出subprojects块。