java.lang.NoClassDefFoundError:试图运行jar时 [英] java.lang.NoClassDefFoundError: when trying to run jar

查看:871
本文介绍了java.lang.NoClassDefFoundError:试图运行jar时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用gradle的spring启动项目

  apply plugin:'java'
apply plugin:'idea '
apply plugin:'jetty'
apply plugin:'war'
apply plugin:'org.springframework.boot'

repositories {
mavenCentral ()
}

dependencies {
compile(org.springframework.boot:spring-boot-starter-web:1.5.1.RELEASE){
排除模块:spring-boot-starter-tomcat
}
编译组:'org.springframework.boot',名称:'spring-boot-starter-jetty',版本:'1.5.1 .RELEASE'
编译组:'org.springframework.boot',名称:'spring-boot-starter-actuator',版本:'1.5.1.RELEASE'
编译组:'org.springframework ',name:'spring-webmvc',版本:'4.3.6.RELEASE'
编译组:'org.springframework',名称:'spring-context-support',版本:'4.3.6.RELEASE '
编译组:'org.springframework',n ame:'spring-orm',版本:'4.3.6.RELEASE'
编译组:'javax.servlet',名称:'javax.servlet-api',版本:'3.1.0'
编译组:'org.freemarker',名称:'freemarker',版本:'2.3.23'
编译组:'mysql',名称:'mysql-connector-java',版本:'6.0.5 '
编译组:'org.hibernate',名称:'hibernate-core',版本:'5.1.4.Final'
编译组:'commons-validator',名称:'commons-validator ',版本:'1.5.1'
编译组:'junit',名称:'junit',版本:'4.12'
编译组:'org.springframework.boot',名称:'spring -boot-starter-test',版本:'1.5.1.RELEASE'
}

任务包装(类型:Wrapper){
gradleVersion ='2.2'
}

buildscript {
repositories {
mavenCentral()
}
依赖关系{
classpath(org.springframework.boot:spring -boot-毕业生le-plugin:1.5.1.RELEASE)
}
}

jar {
baseName ='base-name'
version ='0.1 .0'
manifest {
attributes'Main-Class':'some.application.Application'
}
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

我使用

./gradlew clean jar

然后尝试运行使用

java -jar< jar-name> .jar



然而,我收到一个错误消息,说:

 在线程main中的异常java.lang.NoClassDefFoundError:org / springframework / boot / SpringApplication $ b $ some.application.Application.main(Application.java:11)​​
引起:java.lang.ClassNotFoundException :org.springframework.boot.SpringApplication $ b $ java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
在sun.misc.Laun cher $ AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more

我很困惑,为什么我可以在IDE中运行它,而不是作为jar。还发现我的jar根本没有包含任何库。



编辑:



这是我的 Application.class



package some.application;

  import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application
{
public static void main(String [] args)
{
SpringApplication.run(Application .class,args);


$ / code>


解决方案

是因为你的依赖关系没有包含在最终的jar文件中。



看一看例子这里 here 或者使用。 / gradlew clean build 应该自动将应用程序正确打包。查看官方指南


I have a spring boot project using gradle

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'jetty'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'

repositories {
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.5.1.RELEASE") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty', version: '1.5.1.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '1.5.1.RELEASE'
    compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-context-support', version: '4.3.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-orm', version: '4.3.6.RELEASE'
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    compile group: 'org.freemarker', name: 'freemarker', version: '2.3.23'
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5'
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.1.4.Final'
    compile group: 'commons-validator', name: 'commons-validator', version: '1.5.1'
    compile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.1.RELEASE'
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2'
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.1.RELEASE")
    }
}

jar {
    baseName = 'base-name'
    version = '0.1.0'
    manifest {
        attributes 'Main-Class': 'some.application.Application'
    }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

I build using
./gradlew clean jar
Then try to run using
java -jar <jar-name>.jar

However I get an error saying

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
        at some.application.Application.main(Application.java:11)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

I am so confused as to why I can run it in IDE but not as a jar. Also I found out that my jar doesn't contain any libraries at all.

EDIT:

This is my Application.class

package some.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        SpringApplication.run(Application.class, args);
    }
}

解决方案

This is because your dependencies are not included into the end jar file.

Take a look on the examples here or here.

Or alternatively use ./gradlew clean build that should automatically pack the app correctly. Take a look on the official guide

这篇关于java.lang.NoClassDefFoundError:试图运行jar时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆