编译三剑客。ant、gradle、maven

gradle安装

gradle一般不需要安装,我们只要有他的zip文件就行。
在工程目录下的gradle\wrapper目录下。
有gradle-*-bin.zip、gradle-wrapper.jar、gradle-wrapper.properties三个文件。

需要注意的是gradle-wrapper.properties文件里配置了gradle的安装源文件地址。
我们一般直接指向gradle-*-bin.zip就行了
如下修改

#distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-bin.zip
distributionUrl=gradle-5.6.4-bin.zip

编译配置文件(build.gradle)

gradle跟maven一样,不仅能进行build。也可以自动引入jar。
不过项目里通常不会直接应用网上的源,而是使用本地已经下好的jar。
buildscript 中设定maven库和依赖。
我们现在使用内部提供的maven库就可以了。

buildscript {
    repositories {
        mavenLocal()
        //mavenCentral()
        maven {
            url 'http://10.10.71.97:8081/repository/maven-public/'
        }
    }
    dependencies {
        classpath fileTree(dir: "/lib/classpath", include: '*.jar')
    }
}

东软库的jar包不是很全,如果东软不行的话,可以考虑使用阿里云的。

repositories {
        mavenLocal()
        //mavenCentral()
        maven {
            url 'http://maven.aliyun.com/nexus/content/groups/public/'
        }
    }

subprojects表示设定子工程共通项目。
如果没有子工程,那么我们删除subprojects这层就可以了。

subprojects {

    version = ''

    apply plugin: 'java'
    apply plugin: 'eclipse-wtp'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    sourceCompatibility=11
    targetCompatibility=11

    repositories {
        mavenLocal()
        //mavenCentral()
        maven {
            url 'http://10.10.71.97:8081/repository/maven-public/'
        }
    }

    compileJava {
        options.encoding = 'UTF-8'
    }
    def env = System.getProperty("profile") ?: "dev"
    processResources {
        from('src/main/java') {
            include '**/*.xml'
        }
    }
    if (env == "product") {
        processResources {
            from('/deploy/product/resources') {
                include '**/*.*'
            }
        }
    }
}

对上面个细类说明

version = ''

版本号。如果设定会在生成的jar或war名字上,自动加上版本号。我们通常不用。

apply plugin: 'java'
    apply plugin: 'eclipse-wtp'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

插件。通常设定这4个就好。
java、eclipse、sprintboot、sprint依赖管理。

sourceCompatibility=11
    targetCompatibility=11

JDK版本

repositories {
        mavenLocal()
        //mavenCentral()
        maven {
            url 'http://10.10.71.97:8081/repository/maven-public/'
        }
    }

指定maven仓库。

compileJava {
        options.encoding = 'UTF-8'
    }

java编译参数。一般我们会设定编译文字code。

def env = System.getProperty("profile") ?: "dev"
    processResources {
        from('src/main/java') {
            include '**/*.xml'
        }
    }
    if (env == "product") {
        processResources {
            from('/deploy/product/resources') {
                include '**/*.*'
            }
        }
    }

引入资源。一般我们会使用参数,来配置不同环境使用的资源文件的不同。
例如 PG时默认使用src/main/resources下面的。IT时使用product/resources下面的等等

archivesBaseName = 'CCMS'

打成jar包或war包的名字

war {
    enabled = true
}

打成war包的设定。是否能打成war包。排除哪些代码不打包等。

jar {
    enabled = true
    rootSpec.exclude("/*.*")
}

打成jar报的设置。排除哪些代码不打包等。

bootJar{
    enabled = false
    excludeDevtools = true
}

是否打成springbootjar包。如果是batch,就设定为true。如果是common包,不启动,就设定为false。
排除spring boot 开发工具包。

dependencies {
    compileOnly fileTree(dir: "lib/compileOnly", include: '*.jar')
    implementation fileTree(dir: "lib/implementation", include: '*.jar')
    implementation fileTree(dir: "lib/providedRuntime", include: '*.jar')
    implementation fileTree(dir: "lib/compile", include: '*.jar')
    providedCompile fileTree(dir: "lib/providedCompile", include: '*.jar')
    testImplementation fileTree(dir: "lib/testcompileOnly", include: '*.jar')
}

依赖哪些jar包。
注意是有区别的。
compileOnly只是在编译时使用,并不打入jar或war包。
testImlementation,只是执行自动测试时打入jar或war包。

tasks.create("ppms") {
  group 'ppms'
  description 'ppms task'
  doLast {
    println "[phase:execution] ppms start"
  }
}

做成任务。用于执行确认。

执行

我们设置完配置文件后,使用gradlew执行就可以了。

gradlew build -Dprofile=product

build会把说有的标签都执行一遍。
我们也可以直接指定执行例如

gradle bootJar -Dprofile=product

-q task名来执行task。
执行父类的task,可以把group内的task都执行。

gradlew -q ppms

多工程管理

有时项目会分成几个子工程。我们通常会先建一个父工程。之后在父工程下关联子工程。
父工程的settings.gradle中定义各个子工程

rootProject.name='父工程'
include ':子工程1',':子工程2',':子工程3'

如果子工程中想引入别的子工程。

dependencies {
compile project(':子工程')
}

gradle资源配置文件

gradle可能需要设定一些配置。
例如默认时候,我们不想使用内部maven库,可以在gradle.properties中指定JDK或上网代理

org.gradle.java.home=D:\\java\\11

systemProp.http.proxyHost=proxy.neusoft.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=mailuser
systemProp.http.proxyPassword=mailpassword
systemProp.http.nonProxyHosts=localhost|10.*.*.*|192.168.*.*

systemProp.https.proxyHost=proxy.neusoft.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=mailuser
systemProp.https.proxyPassword=mailpassword
systemProp.https.nonProxyHosts=localhost|10.*.*.*|192.168.*.*

如果提示无法下载。
将上面的url 'http://10.10.71.97:8081/repository/maven-public/'改为阿里仓库url 'http://maven.aliyun.com/nexus/content/groups/public/'

如果提示无法连接proxy.neusoft.com
将proxy.neusoft.com改为后面的ip