Spring核心框架:ApplicationContext的NoClassDefFoundError线程中出现异常

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

我已经创建了一个使用SpringCore框架的简单程序,并且正在尝试使用gradle构建它。我能够成功地编译项目,但当我尝试使用

java-jarbuild\libs\knightFramework-0.1.0.jar

然后我将面临以下运行时异常,但同一个程序在Eclipse中运行良好。 请建议我在build.gradle中进行的更改

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")
}