Mar*_*scu 2 java dependencies build heroku gradle
我的build.gradle文件如下
apply plugin: 'java' sourceCompatibility = 1.8
repositories {
mavenCentral() }
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'io.javalin:javalin:1.3.0'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.4'
compile 'org.slf4j:slf4j-simple:1.7.25' }
jar {
manifest {
attributes(
'Class-Path': configurations.runtime.files.collect {"$it.name"}.join(' '),
'Main-Class': 'products.ProductAPI'
)
} }
task stage {
dependsOn 'build'
dependsOn 'clean'
build.mustRunAfter clean }
Run Code Online (Sandbox Code Playgroud)
尝试使用gradle构建Java应用程序并将其部署到heroku服务器.我有一些问题,java -jar build/libs/MyApp-0.0.1.jar因为它返回以下内容:
线程"main"中的异常java.lang.NoClassDefFoundError:io/javalin/Javalin at products.ProductAPI.main(ProductAPI.java:7)引起:java.lang.ClassNotFoundException:io.javalin.Javalin at java.net.URLClassLoader .findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:338)at java.lang.ClassLoader.loadClass( ClassLoader.java:357)
要在没有任何应用程序的情况下运行应用程序NoClassDefFoundError,您应该在运行时类路径中拥有依赖项.创建一个胖罐是最简单的解决方案.改变你的jar部分如下;
jar {
manifest {
attributes(
'Class-Path': configurations.compile.files.collect {"$it.name"}.join(' '),
'Main-Class': 'products.ProductAPI')}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Run Code Online (Sandbox Code Playgroud)
gradle build将创建运行命令和具有依赖项的jar.其他方法是将jar添加到运行时类路径中; 与java -cp国旗.(另外,如果您的应用程序已经配置了类路径文件夹,则复制此文件夹中的依赖项会将它们添加到类路径中)