dependencies {
compile 'org.slf4j:slf4j-api:1.7.13'
compile group: 'org.apache.commons', name: 'commons-math3' , version: '+'
testCompile 'junit:junit:4.12'
}即使我添加了这个,当我运行gradle build时,它也能工作,并且可以编译带有commons 3的代码。但是当我在build/中运行jar文件时,
它表示线程“主”java.lang.NoClassDefFoundError中的异常:org/apache/commons/math3 3/复杂/复杂
但官方的Gradle站点表示,“编译”中的资源也将包含在“运行时”依赖项中。我还尝试在运行时中添加公共项--数学。但不起作用。
也许这就是我对依赖系统的误解。
如何将maven存储库中的外部库包含到由Gradle生成的jar文件中。
发布于 2016-01-17 08:50:15
您要寻找的要么是由application插件生成的发行版zip,要么是由shadowJar插件生成的影子jar (也称为fat jar):
发行版zip (application插件)
关于分发拉链
分发拉链如下所示:
my-app-0.2.0.zip
├──bin
│ ├──my-app
│ └──my-app.bat
└──lib
├──my-app-0.2.0.jar
├──slf4j-api.1.7.13.jar
└──commons-math3-3.6.jar然后,您可以通过解压缩在build/distributions/中生成的内容并运行my-app.bat ( windows)或./my-app (在linux或OS上)来运行其依赖关系的应用程序。
构建分发拉链
下面是一个制作发行版zip的样例gradle构建文件:
build.gradle
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'org.myapp.Main'
repositories { jcenter() }
dependencies {
compile 'org.slf4j:slf4j-api:1.7.13'
compile 'org.apache.commons:commons-math3:3.6'
testCompile 'junit:junit:4.12'
}可以使用gradle distributionZip或gradle distributionTar运行。要只运行应用程序,请使用gradle run。
影子罐
关于影子罐
影子jar是一个巨大的jar文件,它是你的程序和它的库的组合,打包成一个文件。您将得到一个自包含的文件,可以在大多数系统上双击运行(例如,在工作的Windows上,在Xubuntu上,可以通过右键单击并选择‘Runtime 8 Runtime’等方式运行。
构建分发拉链
下面是一个示例build.gradle文件:
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'
mainClassName = 'org.myapp.Main'
jar {
manifest {
attributes('Main-Class': mainClassName)
}
}
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.2'
}
}
repositories { jcenter() }
dependencies {
compile 'org.slf4j:slf4j-api:1.7.13'
compile 'org.apache.commons:commons-math3:3.6'
testCompile 'junit:junit:4.12'
}使用gradle shadowJar运行它-您的jar具有打包的依赖项将在build/libs中,它将被命名为my-app-x.x.x-all.jar。
发布于 2016-01-17 08:47:29
Gradle首先是一个构建工具(就像maven,顺便说一句)。它的“责任”从你给它源文件时开始,当你得到你的工件(在你的例子中是一个jar)时结束。
现在,当您实际运行您的应用程序时,这里有大量不同的选项。如果您只是运行java -jar <your_jar>,那么您就有责任构建类路径。如果您使用某种外部运行程序运行它,您应该阅读它的文档,并为它提供一个类路径。
希望这能有所帮助
https://stackoverflow.com/questions/34836488
复制相似问题