使用初始化配置
(1)场景
当需要所有的 gradle 项目都进行同样的配置时。
(2)过程
- 在
USER_HOME/.gradle
目录创建名为init.gradle
的文本文件; - 在
init.gradle
编写初始化脚本。
(3)案例:配置自建的 Maven 私有服务器
// init.gradle
allprojects {
ext.RepoConfigurator = {
maven {
url 'http://maven-xx-inc.com/repository/maven-public/'
}
maven {
url 'http://nexus.mobisummer-inc.com/nexus/content/groups/public'
}
}
buildscript.repositories RepoConfigurator
repositories RepoConfigurator
}
排错
Can't execute jar- file: “no main manifest attribute”
在 Linux 上运行 jar 包时出现无法执行的错误,原来是没有配置主类,解决方案如下:
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': 'com.package.app.Class'
}
}
打出的包不包含任何第三方依赖
解压打出来的 jar 包发现里面没有第三方依赖无法运行,这时候有两种解决方案:
(1)把第三方的 jar 包收集放到一个 class path 目录,然后就可以正常启动了。不过这种方法很笨,因为现在的依赖都是通过 gradle 或者 maven 引入,手动去找这些 jar 包并放到服务器上的 class path 目录,这很费劲,不过好处是打出的包很小,上传很快。
(2)使用 shadow 将所有依赖合并成一个 jar 包,这很神奇。
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.github.jengelman.gradle.plugins:shadow:4.0.3"
}
}
apply plugin: 'java'
apply plugin: "com.github.johnrengelman.shadow"
shadowJar {
manifest {
attributes 'Main-Class': 'com.example.Main'
}
}
改完 gradle 脚本之后打包命令不再是 ./gradlew assemble
而是用 ./gradlew shadowJar
。