当外部依赖项位于单独的 lib 文件夹中时,它工作正常,但由于需求的更改,jar 应该包含所有外部依赖项,而不是位于单独的文件夹中。 谁能指导我如何执行 jar 文件 这是我的 Gradle 文件
apply plugin: 'java-library-distribution'
group = 'com.MyCompany'
version = '0.0.1-SNAPSHOT'
description = "data-purge-service"
sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
dependencies {
compile group: 'commons-configuration', name: 'commons-configuration', version:'1.6'
compile group: 'log4j', name: 'log4j', version:'1.2.17'
compile group: 'log4j', name: 'apache-log4j-extras', version:'1.2.17'
compile group: 'org.quartz-scheduler', name: 'quartz', version:'2.2.1'
compile group: 'org.json', name: 'json', version:'20151123'
compile group: 'com.google.inject', name: 'guice', version:'3.0'
compile group: 'commons-codec', name: 'commons-codec', version:'1.10'
compile group: 'org.apache.velocity', name: 'velocity', version:'1.7'
compile group: 'javax.mail', name: 'mail', version:'1.4'
compile group: 'org.jsoup', name: 'jsoup', version:'1.8.3'
runtime group: 'mysql', name: 'mysql-connector-java', version:'6.0.6'
testCompile group: 'junit', name: 'junit', version:'3.8.1'
}
jar {
manifest {
attributes "Main-Class": "com.MyCompany.datapurge.service.App"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
sourceSets {
main {
output.resourcesDir = "build/libs/resources"
}
}
}
当我执行生成的 jar 时,它无法找到依赖项。 执行方法是什么?
最佳答案
就我而言,对于 gradle 版本 5,仅当我使用 configurations.runtimeClasspath
而不是 configurations.compile
时才添加依赖项,正如在许多地方发布的那样。
这里是完整的任务示例:
task BuildJar(type: Jar) {
manifest {
attributes(
'Main-Class': 'org.mycompany.mainclass'
)
}
classifier = 'all'
baseName = 'MyJar'
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
{
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
with jar
}
它将创建一个包含所有内容的 jar。
要运行任务,请执行以下操作:
gradle task BuildJar //use gradew.bat for windows
它将把 jar 放在 ./build/libs
要运行只需执行以下操作:
java -jar MyJar.jar
使用Java Decompile分析 jar 。
关于java - 使用 Gradle 执行包含依赖项的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49519467/