java.lang.NoClassDefFoundError:试图运行jar时 [英] java.lang.NoClassDefFoundError: when trying to run 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屋!