簡體   English   中英

Eclipse + Maven + Spring應用程序:java.lang.NoClassDefFoundError

[英]Eclipse + Maven + Spring Application: java.lang.NoClassDefFoundError

關於這個問題有很多stackoverflow問題,但是令人驚訝的是,它們似乎並沒有解決我的情況。

我已經驗證了以下內容:

  1. 沒有沖突的Spring庫。 我正在使用Maven存儲庫中的最新版本
  2. 我正在使用Maven Eclipse插件,並使用Run類作為Java Application在Eclipse中運行它。 無需組裝
  3. 我已經在本地Maven存儲庫中手動檢查了jar文件。 它在預期的路徑中具有EnvironmentCapable.class
  4. 這是一個簡單的應用程序,基本上是Spring in Action手冊第1章中的代碼

我的POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.springinaction</groupId>
  <artifactId>knights</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>knights</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.10.19</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
  </dependencies>
</project>

無法運行的主類代碼。

package com.springinaction.knights;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;

public class KnightMain {

    public static void main(String[] args) throws Exception {

        AbstractApplicationContext context = new AnnotationConfigApplicationContext(KnightConfig.class);

        Knight knight = (Knight)context.getBean(Knight.class);
        knight.embarkOnQuest();
        context.close();
    }
}

錯誤要點:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    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)

如果您在本地存儲庫中找到了一些希望擺脫的舊工件,請執行以下操作:

  1. 在命令行上轉到pom.xml所在的文件夾
  2. 輸入並執行下一個命令: dependency:purge-local-repository

該命令將從項目中正在使用的依賴項中清除本地存儲庫。

查看來自Maven網站的描述:

在此處輸入圖片說明

現在,到:

  1. 在命令行上轉到pom.xml所在的文件夾
  2. 輸入並執行下一個命令: dependency:copy-dependencies

查看來自Maven網站的描述:

在此處輸入圖片說明

該命令將從遠程存儲庫中將必要的依賴項拉至本地存儲庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM