Spring核心框架:ApplicationContext的NoClassDefFoundError线程中出现异常
我已经创建了一个使用SpringCore框架的简单程序,并且正在尝试使用gradle构建它。我能够成功地编译项目,但当我尝试使用 java-jarbuild\libs\knightFramework-0.1.0.jar 然后我将面临以下运行时异常,但同一个程序在Eclipse中运行良好。 请建议我在build.gradle中进行的更改Spring核心框架:ApplicationContext的NoClassDefFoundError线程中出现异常,spring,gradle,build.gradle,Spring,Gradle,Build.gradle,我已经创建了一个使用SpringCore框架的简单程序,并且正在尝试使用gradle构建它。我能够成功地编译项目,但当我尝试使用 java-jarbuild\libs\knightFramework-0.1.0.jar 然后我将面临以下运行时异常,但同一个程序在Eclipse中运行良好。 请建议我在build.gradle中进行的更改 Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/co
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
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)
代码结构
src\main\java\knightFramework->包含类BraveKnight.java、KnightConfig.java、KnightMain.java、SlayDragonQuest.java和接口:Knight.java、Quest.java
KnightMain.java
bk.BounkonQuest->的O/p只是在执行杀龙任务
KnightConfig.java
package knightFramework;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class KnightConfig {
@Bean
public Knight braveKnightBean(){
return new BraveKnight(slayDragonQuest());
}
@Bean
public Quest slayDragonQuest(){
return new SlayDragonQuest();
}
}
格雷德尔先生
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'
mainClassName = 'knightFramework.KnightMain'
jar {
baseName = 'knightFramework'
version = '0.1.0'
manifest {
attributes 'Main-Class': 'knightFramework.KnightMain'
}
}
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework:spring-context:4.1.6.RELEASE")
}
尝试删除jar任务中的清单配置。这是由应用程序插件自动完成的。检查生成的清单。@JB Nizet我尝试过一个异常,没有主清单属性,在build\libs\中,而且如果我使用buld.gradle文件,它运行得很好,唯一的变化是与apply plugin相关的:“spring boot”@JB niset spring boot plugin在jar的执行中起任何作用吗如果你正在创建一个jar,你需要指定在执行java时需要哪些jar-jar-Your.jar你应该使用java-cp all.jars.here-jar Your.jar将这些jar添加到类路径中。您参考的指南是使用Spring Boot创建可运行的jar,然而,正常的jar过程并不能做到这一点。@M.Deinum我对spring框架和使用gradle生成jar很陌生,但我认为gradle应该能够构建jar,而不需要提供额外的属性,比如在这里向类路径添加外部jar,所以请就build.gradle提出修改建议
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'
mainClassName = 'knightFramework.KnightMain'
jar {
baseName = 'knightFramework'
version = '0.1.0'
manifest {
attributes 'Main-Class': 'knightFramework.KnightMain'
}
}
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework:spring-context:4.1.6.RELEASE")
}