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方法所在的文件
)
}
}
网友评论