Gradle使用三十六计

2021-08-14  本文已影响0人  JohnYuCN

gradle生态系统的使用,算是一个长期艰巨的工作,艰巨性更多的来自于习惯的阻力;这是一篇需要不断积累的文章...


乍暖还寒的鸭绿江畔--2021年2月4日傍晚

快速初始化及更换gradle的版本

mkdir pname && cd pname && gradle init 

此时项目下的gradle/wrapper/gradle-wrapper.properties文件中的内容,可以用来修改gradle对于本项目的构建版本,注意:更换后,请使用./gradlew [taskname]进行构建操作。

全局替换远程库设置:

在${USER_HOME}/.gradle/init.gradle 文件中,进行如下配置:

def repoConfig = {
    all { ArtifactRepository repo ->
        if (repo instanceof MavenArtifactRepository) {
            def url = repo.url.toString()
            if (url.contains('repo1.maven.org/maven2') || url.contains('jcenter.bintray.com')) {
                println "gradle init: (${repo.name}: ${repo.url}) removed"
                remove repo
            }
        }
    }
    // maven { url 'http://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
    mavenLocal()
    maven { url 'https://maven.aliyun.com/repository/central' }
    maven { url 'https://maven.aliyun.com/repository/jcenter' }
    maven { url 'https://maven.aliyun.com/repository/google' }
    maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}

allprojects {
    buildscript {
        repositories repoConfig
    }

    repositories repoConfig
}

强制刷新本地缓存:

gradle会把从远程下载的库在本地${GRADLE_HOME}/caches/下进行缓存,如果远程库内容发生变动,就会导致本地无法感知的问题,此时可以进行如下操作加以解决:

./gradlew build --refresh-dependencies

但要注意,如果使用了mavenLocal(),而你使用的库又位于其中,就需要额外手动去强制刷新maven的本地库,而这恰是maven最大的痛点,因为只能通过手删除本地jar或使用snapshot版本,来完成此类工作。

更加详细的查看构建的全过程:

gradle虽然提供了控制台的日志,但这根本是无法观察构建的全貌的,我们可以将构建的全部信息PUSH到其官网的服务上,进而可以通过web浏览的方式进行查看,方法如下:

./gradlew build --scan

屏幕会出现:Do you accept these terms? [yes, no]的提示,回答yes后,会出现:https://gradle.com/s/7nzupn2lvrkte的响应,浏览后会查看到详细的信息(需要事先使用邮箱进行激活操作)。

java编译版本的控制

原理是 java plugin 的compileJava task类中有两个属性控制着编译的版本:

//java 插件的任务
compileJava {
    targetCompatibility=JavaVersion.VERSION_11
    sourceCompatibility=JavaVersion.VERSION_11
}

但是,这两个属性在Project类中也可以设置,只是运行时被complieJava类进行覆盖(如此处不设置,即为继承),同时Project类中如果不设置,则默认采用了当前JVM的版本。
此方法的缺点是:当前运行gradle的JVM如果低于targetCompatibility的版本,则构建无法进行,所以可以使用以下方法进行改良:

在java plugin 的 java task中:

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
    }
}

原理是,下载一个微型的OPEN JDK做为环境进行构建和编译,同时将以上两个属性设置为相同的版本,即11。但此时,就不能再设置这个属性了。

生成可执行的jar包

在 java plugin 的 jar 任务中,做如下配置:

jar {
    manifest { //配置jar文件的manifest
        attributes(
                "Manifest-Version": 1.0,
                'Main-Class': 'cn.johnyu.MyApp' //指定main方法所在的文件
        )
    }
}
上一篇 下一篇

猜你喜欢

热点阅读