Gradle-java-多项目

有时候构建的java项目包含多个工程项目,这时候与单个的工程项目构建略微不同,需要配置root-project的build.gradle和settings.gradle以及sub-project的build.gradle

example

root-project-settings.gradle

root-project的settings.gradle中定义了root-project和sub-project所在的目录

rootProject.name = 'fabric-chaincode-java'

include 'fabric-chaincode-protos'
include 'fabric-chaincode-shim'
include 'fabric-chaincode-docker'
include 'fabric-chaincode-integration-test'

其中:rootProject.name定义root-project的名字;include 定义子项目的目录

root-project-build.gradle

根项目的配置的内容包括子项目配置、所有项目配置(公共配置)、当前项目配置.其公共配置采用配置注入的方式配置。根项目就像一个容器,子项目会迭代访问它的配置并注入到自己的配置中。

apply plugin: 'idea'
apply plugin: 'eclipse-wtp'

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'maven'

    group = 'org.hyperledger.fabric-chaincode-java'
    version = '2.0.0-SNAPSHOT'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    dependencies {
        compile 'commons-cli:commons-cli:1.4'
        compile 'commons-logging:commons-logging:1.2'

        testCompile 'junit:junit:4.12'
        testCompile 'org.hamcrest:hamcrest-library:1.3'
        testCompile 'org.mockito:mockito-core:2.23.0'
        testCompile 'com.github.stefanbirkner:system-rules:1.17.0'
    }
}

其中:subprojects:定义了子项目的公共配置;allprojects定义了所有项目的配置.子项目的配置可以覆盖公共配置

sub-project-build.gradle

项目依赖

同一个构建中可以建立工程依赖,一个工程的 jar 包可以提供给另外一个工程使用。该项目依赖于fabric-chaincode-protos项目的代码

dependencies {
    compile project(':fabric-chaincode-protos')
    compile 'io.netty:netty-tcnative-boringssl-static:2.0.15.Final'
    compile 'org.bouncycastle:bcpkix-jdk15on:1.60'
    compile 'org.bouncycastle:bcprov-jdk15on:1.60'
}
项目分发