当外部依赖项位于单独的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时,它无法找到依赖项。 执行它的方法是什么?
答案 0 :(得分:0)
“在此tutorial中,我们将向您展示如何使用Gradle构建工具创建具有依赖项的单个Jar文件。”
答案 1 :(得分:0)
就我而言,在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
它将罐子放在./build/libs
要运行,只需执行以下操作:
java -jar MyJar.jar
使用Java Decompile来分析罐子。