介绍
利用gradle进行编译打包全部依赖,避免jar包和war包缺失依赖,导致无法直接执行,介绍2种方式打包全部依赖。
- gradle application plugin
- fat jar
Application plugin
利用gradle的Application插件构建jar包,不但可以打包全部的依赖,还可以直接生成可以执行的shell脚本。
译 https://docs.gradle.org/current/userguide/application_plugin.html
使用Application插件
// build.gradle文件
apply plugin: 'application'
指定应用的main函数在的类
// build.gradle文件
mainClassName = "org.gradle.sample.Main"
可以指定JVM启动参数
// build.gradle文件
applicationDefaultJvmArgs = ["-Dgreeting.language=en"]
Application插件编译的Jar包位置
(1) 利用gradle build编译项目之后,会生成build文件夹,完整位置在build/distributions
(2) distributions下有2个压缩包 *.tar, *.zip
(3) 解压任意一个压缩包,能看到lib, bin
(4) bin目录下包含可执行的shell脚本
(5) lib目录下全部的jar包
Fat Jar
build.gradle文件示例
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
}
使用Jar任务构建Fat Jar
// 指定main函数的类
jar {
manifest {
attributes "Main-Class": "com.baeldung.fatjar.Application"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
创建单独任务构建Fat Jar
task customFatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'com.baeldung.fatjar.Application'
}
baseName = 'all-in-one-jar'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
使用已有的gradle插件(shadow插件示例)
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
}
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'
译文来源
https://docs.gradle.org/current/userguide/application_plugin.html
http://www.baeldung.com/gradle-fat-jar