Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 成功的Gradle项目构建在运行时生成NoClassDefFoundError_Java_Gradle - Fatal编程技术网

Java 成功的Gradle项目构建在运行时生成NoClassDefFoundError

Java 成功的Gradle项目构建在运行时生成NoClassDefFoundError,java,gradle,Java,Gradle,我正在使用Gradle在Eclipse中构建Java项目。gradle.build如下所示 apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0' compile group: 'org.reflections', name: 'reflections',

我正在使用Gradle在Eclipse中构建Java项目。gradle.build如下所示

apply plugin: 'java'
repositories {
    mavenCentral()
}
dependencies {
    compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0'
    compile group: 'org.reflections', name: 'reflections', version: '0.9.10'
}
通过Eclipse运行时,所有库都正常运行。但有时在命令行上工作是有用的。在命令行上运行时,线程“main”java.lang.NoClassDefFoundError:com/flowpowered/nbt/regionfile/SimpleRegionFileReader中出现运行时错误
异常,即使生成成功并且代码包含从这些库导入的内容。我尝试过清理和重建,以及
gradlew build--refresh dependencies
,但仍然遇到相同的运行时错误


我假设这些库从未真正导入过?或者它们没有存储在java项目认为它们所在的位置?我不熟悉Gradle,因此欢迎就此提供任何建议。

根据发布的
build.Gradle
文件,您没有将应用程序打包为可执行JAR

首先应用
应用程序
插件。但是这还不够,因为如果没有它的所有依赖项,您将无法将可执行文件作为一个JAR运行。也应用
shadow
插件

这两个插件将允许您访问以下任务:

  • run
    :从gradle的命令行执行应用程序
  • runShadow
    :执行应用程序,但将所有依赖项打包在一个JAR中,与编译的类和资源一起执行
  • shadowJar
    :创建一个包含已编译类和所有依赖项的“胖JAR”
因此,您的
build.gradle
可能如下所示

plugins {
    id 'java'
    id 'application'
    id 'com.github.johnrengelman.shadow' version '1.2.4'
}
mainClassName = 'com.acme.YourMainClassName'
repositories {
    mavenCentral()
}
dependencies {
    compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0'
    compile group: 'org.reflections', name: 'reflections', version: '0.9.10'
}
插件文档:


根据发布的
build.gradle
文件,您没有将应用程序打包为可执行JAR

首先应用
应用程序
插件。但是这还不够,因为如果没有它的所有依赖项,您将无法将可执行文件作为一个JAR运行。也应用
shadow
插件

这两个插件将允许您访问以下任务:

  • run
    :从gradle的命令行执行应用程序
  • runShadow
    :执行应用程序,但将所有依赖项打包在一个JAR中,与编译的类和资源一起执行
  • shadowJar
    :创建一个包含已编译类和所有依赖项的“胖JAR”
因此,您的
build.gradle
可能如下所示

plugins {
    id 'java'
    id 'application'
    id 'com.github.johnrengelman.shadow' version '1.2.4'
}
mainClassName = 'com.acme.YourMainClassName'
repositories {
    mavenCentral()
}
dependencies {
    compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0'
    compile group: 'org.reflections', name: 'reflections', version: '0.9.10'
}
插件文档:


另一种解决方案,不使用任何插件,但最终仍然得到一个可运行的胖罐子

jar {
    archiveName = 'NameOfYourApp.jar'

    manifest {
        attributes 'Main-Class': 'uk.co.cdl.Main',
                'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' '),
                'Implementation-Version': project.version
    }

    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
    include/exclude anything if need to if not take the curlys off 
    }
}

另一个解决方案没有使用任何插件,但最终仍然是一个可运行的胖罐子

jar {
    archiveName = 'NameOfYourApp.jar'

    manifest {
        attributes 'Main-Class': 'uk.co.cdl.Main',
                'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' '),
                'Implementation-Version': project.version
    }

    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
    include/exclude anything if need to if not take the curlys off 
    }
}