Gradle multimodule

时间:2018-02-25 05:46:23

标签: java gradle multi-module multi-project

我有一个模块化项目,我决定将它分发给模块。服务器和客户端。

现在有一个问题。如何从另一个模块调用依赖任务?

parent build.gradle

plugins {
  id "net.ltgt.apt" version "0.14"
}

apply from: "$rootDir/gradle/idea.gradle"

group 'com.test.portal'
version '1.0-SNAPSHOT'

allprojects {
  apply plugin: 'net.ltgt.apt'
}

subprojects {
  apply from: "$rootDir/gradle/versions.gradle"
  apply from: "$rootDir/gradle/java.gradle"

  repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
  }
}

java.gradle

def generatedDir = new File("$projectDir", "src/generated")

apply plugin: 'java'

sourceSets {
  generated {
    java.srcDir "src/generated/java"
  }
  main.java.srcDirs = ['src/main/java', "src/generated/java"]
  main.resources.srcDir "src/main/resources"
  test.java.srcDir "src/test/java"
  test.resources.srcDir "src/test/resources"
}

// deletes generated classes before new compilation
task deleteGenerated(type: Delete) {
  generatedDir.deleteDir()
}

compileGeneratedJava {
  dependsOn('deleteGenerated')
}

compileJava {
  sourceCompatibility = "1.8"
  targetCompatibility = "1.8"
  options.encoding = 'UTF-8'
  options.compilerArgs = ['-Xlint:unchecked'] // Just a smoke test that using this option does not lead to any
  options.annotationProcessorGeneratedSourcesDirectory = new File("$generatedDir", "java")
  dependsOn(processResources, compileGeneratedJava)
  source += sourceSets.generated.java
  source += sourceSets.generated.output
}

test {
  systemProperties = System.properties
}

我有2个子模块

GWT

的build.gradle

apply from: "$rootDir/gradle/gwt.gradle"

dependencies {
...
}

compileGwt {
  classpath {
    [
        sourceSets.main.java.srcDirs,           // Java source
        sourceSets.main.output.resourcesDir,    // Generated resources
        sourceSets.main.output.classesDir,      // Generated classes
        sourceSets.main.compileClasspath,       // Deps
    ]
  }
}

gwt.gradle

task compileGwt(dependsOn: classes, type: JavaExec) {
  ext.buildDir = "${project.buildDir}/gwt"
  ext.extraDir = "${project.buildDir}/extra"

  inputs.file sourceSets.main.java.srcDirs
  inputs.dir sourceSets.main.output.resourcesDir
  outputs.dir buildDir

  doFirst {
    file(buildDir).mkdirs()
  }

  main = "com.google.gwt.dev.Compiler"

  classpath {
    [
        sourceSets.main.java.srcDirs,           // Java source
        sourceSets.main.output.resourcesDir,    // Generated resources
        sourceSets.main.output.classesDir,      // Generated classes
        sourceSets.main.compileClasspath,       // Deps
    ]
  }

  if (project.hasProperty('dev')) {
    println "Run developer mode"
    args = [
        "com.test.portal.AppClientModule",
        "-war", buildDir,
        "-logLevel", "INFO",
        "-localWorkers", "4",
        "-compileReport",
        "-extra", extraDir,
        "-style", "OBF",
        "-optimize", "9" // 0=none, 9=max
    ]
  } else {
    println "Run production mode"
    args = [
        "com.test.portal.AppClientModule",
        "-war", buildDir,
        "-logLevel", "INFO",
        "-localWorkers", "4",
        "-compileReport",
        "-extra", extraDir,
        "-style", "OBF",
        "-optimize", "9" // 0=none, 9=max
    ]
  }

  maxHeapSize = "4G"
}

服务器

gradle.build

plugins {
  id "org.springframework.boot" version "1.5.10.RELEASE"
}

dependencies {
...
}

jar.dependsOn compileGwt

jar {
  into("static") {
    from compileGwt.buildDir
  }
}

问题:

  1. 如何从一个模块调用 jar.dependsOn compileGwt ,从另一个模块调用任务
  2. 脚本 java.gradle 我可以优化吗?是否有重复的代码?

0 个答案:

没有答案