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-math3的代码。但是当我在build /中运行一个jar文件时,
它在线程“main”中说异常java.lang.NoClassDefFoundError:org / apache / commons / math3 / complex / Complex
但Gradle官方网站称,“compile”中的资源也将包含在“运行时”依赖项中。我还尝试将 commons-math 添加到运行时。但它不起作用。
也许这是我对依赖系统的误解。
如何将maven存储库中的外部库包含到Gradle创建的jar文件中。
答案 0 :(得分:3)
您要查找的是由application
插件生成的分发拉链或由shadowJar
插件生成的影子jar(也称为胖jar):
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 X上)来运行应用程序及其依赖项< / p>
以下是制作分发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上,可以通过右键单击并选择&#39; Run with Oracle Java 8来运行它运行时&#39;等...)。
以下是样本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
。
答案 1 :(得分:1)
Gradle首先是一个构建工具(就像maven,顺便说一句)。 它的“响应性”在你提供源文件时开始,在你获得你的工件时结束(在你的情况下它是一个罐子)。
现在,当您打算实际运行应用程序时,这里有许多不同的选项。
如果您只运行java -jar <your_jar>
,您自己负责构建类路径。
如果您使用某种外部运行程序运行它,您应该阅读它的文档并提供类路径。
希望这有帮助