Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 jar中存在NoClassDefFoundError,但Intellij中没有_Java_Intellij Idea_Gradle_Jira Rest Api - Fatal编程技术网

Java jar中存在NoClassDefFoundError,但Intellij中没有

Java jar中存在NoClassDefFoundError,但Intellij中没有,java,intellij-idea,gradle,jira-rest-api,Java,Intellij Idea,Gradle,Jira Rest Api,我正在尝试运行一个带有依赖项的jar。应用程序在Intellij中运行良好,但当我尝试运行jar时,我得到: >> java -jar test-0.1.0.jar Exception in thread "main" java.lang.NoClassDefFoundError: com/atlassian/httpclient/apache/httpcomponents/DefaultHttpClient at com.atlassian.jira.rest.cl

我正在尝试运行一个带有依赖项的jar。应用程序在Intellij中运行良好,但当我尝试运行jar时,我得到:

>> java -jar test-0.1.0.jar
Exception in thread "main" java.lang.NoClassDefFoundError: com/atlassian/httpclient/apache/httpcomponents/DefaultHttpClient
        at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory.createClient(AsynchronousHttpClientFactory.java:53)
        at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.create(AsynchronousJiraRestClientFactory.java:35)
        at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(AsynchronousJiraRestClientFactory.java:42)
        at Main.main(Main.java:19)
Caused by: java.lang.ClassNotFoundException: com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 4 more 
我的build.gradle如下所示:

group 'test'
version '1.0-SNAPSHOT'

task wrapper(type: Wrapper) {
  gradleVersion = '2.9'
  distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'application'

sourceCompatibility = 1.8

mainClassName = "Main"

repositories {
    mavenCentral()
    maven {
        url 'https://maven.atlassian.com/content/repositories/atlassian-public/'
    }
}

jar {
    baseName = 'test'
    version =  '0.1.0'

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
        configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
    }

    manifest {
        attributes 'Main-Class': 'Main'
    }
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'

    compile 'com.atlassian.jira:jira-rest-java-client-parent:4.0.0'
    compile 'com.atlassian.jira:jira-rest-java-client-core:4.0.0'
    compile 'com.atlassian.jira:jira-rest-java-client-api:4.0.0'
    compile 'com.atlassian.jira:jira-rest-java-client-plugin:3.0.0'
    compile 'com.atlassian.fugue:fugue-parent:2.6.1'
    compile 'com.atlassian.fugue:fugue:2.6.1'
}
我还尝试将
transitive=true
添加到每个compile子句中,但没有成功。

您需要

类路径是Java运行时环境搜索类和其他资源文件的路径。可以在调用JDK工具(首选方法)时使用-classpath选项或通过设置classpath环境变量来设置类搜索路径(通常简称为“classpath”)。首选-classpath选项,因为您可以为每个应用程序单独设置它,而不会影响其他应用程序,也不会让其他应用程序修改其值

更新:

默认情况下,Gradle不会将依赖项复制到构建文件夹或将其包含到jar中。有三种方法可以解决依赖性问题:

  • 分别下载并放入相应的目录中
  • 使用插件构建胖罐子。差不多
  • 添加到build.gradle任务,该任务将依赖项复制到生成文件夹中
  • 比如说

    task copyDependencies(type: Copy) {
        into "$buildDir/libs"
        from configurations.runtime
    }
    
    你需要

    类路径是Java运行时环境搜索类和其他资源文件的路径。可以在调用JDK工具(首选方法)时使用-classpath选项或通过设置classpath环境变量来设置类搜索路径(通常简称为“classpath”)。首选-classpath选项,因为您可以为每个应用程序单独设置它,而不会影响其他应用程序,也不会让其他应用程序修改其值

    更新:

    默认情况下,Gradle不会将依赖项复制到构建文件夹或将其包含到jar中。有三种方法可以解决依赖性问题:

  • 分别下载并放入相应的目录中
  • 使用插件构建胖罐子。差不多
  • 添加到build.gradle任务,该任务将依赖项复制到生成文件夹中
  • 比如说

    task copyDependencies(type: Copy) {
        into "$buildDir/libs"
        from configurations.runtime
    }
    

    嗨,塔克斯。你能举个具体的例子吗?现在我正在做
    java-jartest-0.1.0.jar
    。应该是
    java-classpath-jar build\libs\test-0.1.0.jar
    ?是的,如果所有依赖项jar都在同一个文件夹中。我的错误!请尝试
    java-classpath\to\dependencies\*-jarbuild\libs\test-0.1。‌​0.jar
    我想我遗漏了什么?我不知道依赖关系在哪里。它们不应该在jar中吗?嗯,当使用
    -jar
    开关时,
    类路径
    被忽略。。。您可以使用
    java-cp build\libs\*Main
    (不要忘记星号)运行jar,或者您需要在清单中定义类路径。你能举个具体的例子吗?现在我正在做
    java-jartest-0.1.0.jar
    。应该是
    java-classpath-jar build\libs\test-0.1.0.jar
    ?是的,如果所有依赖项jar都在同一个文件夹中。我的错误!请尝试
    java-classpath\to\dependencies\*-jarbuild\libs\test-0.1。‌​0.jar
    我想我遗漏了什么?我不知道依赖关系在哪里。它们不应该在jar中吗?嗯,当使用
    -jar
    开关时,
    类路径
    被忽略。。。您可以使用
    java-cp build\libs\*Main
    (不要忘记星号)运行jar,或者需要在清单中定义类路径。