以下是我成功创建一个带有外部jar依赖的Hello World Java应用程序,并满足以下要求的Gradle解决方案:
- 应用程序具有外部jar依赖项
- 创建一个可运行的fat jar文件,其中包含所有依赖类的副本
- 创建一个可运行的jar文件,其中包含所有依赖库的副本,并在清单中添加类路径。
- 安装最新版本的gradle(检查gradle --version。我使用的是gradle 6.6.1)
- 创建一个文件夹并打开终端
- 执行
gradle init --type java-application
- 在命令行中添加所需的数据
- 将项目导入IDE(IntelliJ或Eclipse)
- 使用以下任务编辑build.gradle文件。
可运行的fat Jar
task fatJar(type: Jar) {
clean
println("Creating fat jar")
manifest {
attributes 'Main-Class': 'com.abc.gradle.hello.App'
}
archiveName "${runnableJar}"
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println("Fat jar is created")
}
复制依赖项
task copyDepends(type: Copy) {
from configurations.default
into "${dependsDir}"
}
使用清单文件创建包含classpath依赖项的jar包
task createJar(type: Jar) {
println("Cleaning...")
clean
manifest {
attributes('Main-Class': 'com.abc.gradle.hello.App',
'Class-Path': configurations.default.collect { 'dependencies/' +
it.getName() }.join(' ')
)
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println "${outputJar} created"
}
这里是完整的 build.gradle 文件
plugins {
id 'java'
id 'application'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.slf4j:slf4j-api:1.7.30'
implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'ch.qos.logback:logback-core:1.2.3'
testImplementation 'junit:junit:4.13'
}
def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
def dependsDir = "${buildDir}/libs/dependencies/"
def runnableJar = "${rootProject.name}_fat.jar";
task fatJar(type: Jar) {
clean
println("Creating fat jar")
manifest {
attributes 'Main-Class': 'com.abc.gradle.hello.App'
}
archiveName "${runnableJar}"
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println("Fat jar is created")
}
task copyDepends(type: Copy) {
from configurations.default
into "${dependsDir}"
}
task createJar(type: Jar) {
println("Cleaning...")
clean
manifest {
attributes('Main-Class': 'com.abc.gradle.hello.App',
'Class-Path': configurations.default.collect { 'dependencies/' +
it.getName() }.join(' ')
)
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println "${outputJar} created"
}
Gradle构建命令
创建fat jar : gradle fatJar
复制依赖项 : gradle copyDepends
创建可运行的带有依赖项的jar包 : gradle createJar
更多细节可以在这里阅读:https://jafarmlp.medium.com/a-simple-java-project-with-gradle-2c323ae0e43d