Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java渐变构建:NoClassDefFoundError_Java_Heroku_Gradle_Build_Dependencies - Fatal编程技术网

Java渐变构建:NoClassDefFoundError

Java渐变构建:NoClassDefFoundError,java,heroku,gradle,build,dependencies,Java,Heroku,Gradle,Build,Dependencies,我的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.fast

我的
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 }
尝试使用gradle构建java应用程序并将其部署到heroku服务器。我在
java-jarbuild/libs/MyApp-0.0.1.jar
中遇到了一些问题,因为它返回以下内容:

线程“main”java.lang.NoClassDefFoundError中出现异常: io/javalin/javalin位于products.ProductAPI.main(ProductAPI.java:7) 原因:java.lang.ClassNotFoundException:io.javalin.javalin at java.net.URLClassLoader.findClass(URLClassLoader.java:381)位于 loadClass(ClassLoader.java:424)位于 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)位于 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) }
    }
}
运行
gradlebuild
命令,将创建具有依赖项的jar。
另一种方法是将JAR添加到运行时类路径中;使用
java-cp
标志。(另外,如果您的应用程序已经配置了类路径文件夹,则复制此文件夹中的依赖项会将它们添加到类路径)

尝试编译组'io.javalin:javalin:1.3.0'尝试了它,但它无法正常工作如果依赖项配置了实现范围,则可以使用以下方法创建fat jar: