簡體   English   中英

Eclipse - java.lang.ClassNotFoundException 異常

[英]Eclipse - java.lang.ClassNotFoundException

當嘗試從 Eclipse 開始我的 JUnit-Test 時,我得到一個“ClassNotFoundException”。 從控制台運行“mvn test”時 - 一切正常。 此外,Eclipse 中沒有報告任何問題。

我的項目結構如下:

  • 父項目(pom-packaging)
    • Web 項目(war-packaging - 我的 JUnit-test 在這里)
    • 彈性項目
    • 配置項目

編輯:怎么找不到課程? 這是一個沒有特殊庫的簡單 HelloWorld 應用程序。

這是我的 JUnit 運行配置:替代文本 http://www.walkner.biz/_temp/runconfig.png


測試類(但正如我所說;它也不適用於簡單的 HelloWorld ......):

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;

public class UserDaoTest {
/**
 * the applicationcontext.
 */
private ApplicationContext ctx = null;

/**
 * the user itself.
 */
private User record = null;

/**
 * Interface for the user.
 */
private UserRepository dao = null;

@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}

@After
public void tearDown() throws Exception {
dao = null;
}

@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}

@Test
    public final void testIsNoUser() throws Exception {
    Assert.assertFalse(dao.isUser("not", "existing"));
        Assert.assertFalse(dao.isUser(null, null));
        Assert.assertFalse(dao.isUser("", ""));
    }
}

我多次遇到這種情況,經過多次嘗試,我找到了解決方案。

檢查您的項目構建路徑並為每個文件夾啟用特定的輸出文件夾。 通過項目的每個源文件夾一個接一個,並設置 maven 將使用的輸出文件夾。

例如,你的web項目的src/main/java應該在web項目下有target/classes ,測試類在web項目下也應該有target/test-classes等等。

使用此配置將允許您在 eclipse 中執行單元測試。

還有一個建議,如果您的 web 項目的測試需要一些資源下的配置文件,請確保將該文件夾作為源文件夾包含並進行正確的構建路徑配置。

希望能幫助到你。

卡洛斯的方法有幫助! Eclipse - java.lang.ClassNotFoundException

嘗試檢查junit運行配置的類路徑:

  1. 打開您的運行配置
  2. 單擊要啟動的 jUnit-Test
  3. 轉到類路徑選項卡
  4. 嘗試添加一個文件夾(單擊用戶條目,單擊高級,單擊添加文件夾,單擊確定並在輸出文件夾中搜索您的測試類(您在 projektproperties java 構建路徑下找到的那些,源))

為我工作。

您的構建類路徑是正確的,這就是您可以編譯的原因。 需要檢查 JUnit 的類路徑。 轉到“運行”菜單並選擇“打開運行對話框”。 在那里,您應該會在左側看到一棵帶有 JUnit 選項的樹。 打開該節點並找到並選擇您的測試。 在右側窗格中,您將看到類路徑選項卡。 查看以確保您的測試試圖實例化的類會被找到。

編輯:

這似乎是 maven 及其在發布更改默認 Eclipse 輸出文件夾后的行為的問題。 我已經看到描述的解決方案在哪里

  • 將 maven 放入 jre 工程上方的引導類路徑,或
  • 運行mvn clean test可以解決問題或
  • 刷新所有 eclipse 項目,導致重建解決問題
  • 轉到您的項目並選擇 Maven->Update Configuration 解決問題

對於前三個,有報告稱該問題反復出現。 最后一個對我來說最好,但如果它不起作用,請嘗試其他的。

這里這里的一些信息

啟用[x] 使用臨時 JAR運行配置類路徑選項卡指定類路徑(以避免類路徑長度限制)對我來說很有效。

如果您的項目很大,並且您有很多來自其他兄弟項目和 maven 依賴項的依賴項,您可能會遇到類路徑長度限制,這似乎是唯一的解決方案(除了縮短本地 maven repo 的目錄(我們的已經開始)在 c:/m2)

在此處輸入圖片說明

問題可能是缺少構建文件夾中的類文件。 一種解決方案是清理項目並重建它。

這里有很多令人費解的建議。

在通過拖放移動資源或執行類名重構后,我在 Maven 項目中多次遇到此問題。

如果發生這種情況,只需通過終端/文件瀏覽器將問題測試用例 ( .java ) 復制(而不是移動)到另一個位置, right-click -> Delete在 Eclipse 中right-click -> Delete ,並在給出選項時選擇在磁盤上刪除,移動/復制將復制的文件復制到原始文件位置,然后在 Eclipse 中選擇您的項目並按 F5 刷新資源。

這既快速又容易,並且每次都為我永久解決了問題。

我們有一個確切的例外(在 Win7 上使用 SpringSource 工具、tomcat),原因是我們將文件名(重命名文件)從 SubDomain.java 重構為 Subdomain.java(D vs d),盡管 SpringSource 是顯示新名稱 Subdomain.java。 解決方案是刪除該文件(通過 SpringSource)並在名稱 Subdomain.java 下重新創建它並復制粘貼其以前的內容。 就那么簡單。

我有完全相同的問題,但我想通了! 轉到您的項目文件並右鍵單擊它,然后單擊Refresh或按 F5。 然后嘗試運行它。 如果它仍然不起作用,那就忘記它,因為我遇到了完全相同的問題,這只是意味着您的 Eclipse 版本是垃圾。

這是我解決問題的方法。 當然,很多事情都會導致它發生。 對我來說,Maven2(不是 Eclipse 的插件)正在設置 Eclipse 配置文件以使用不同的構建器(aspectJ),但我在 Eclipse 中沒有該插件。/

http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html

干杯拉蒙巴克蘭

Sachin 是對的:即使使用正確的類路徑,問題選項卡也會顯示某些依賴項或資源/項目有錯誤需要修復,以便 maven 在您創建或更改測試類時自動構建和創建類.

“你好,

它非常古老的 7 月(哪一年),但我遇到了同樣的問題。

實際問題發現eclipse無法為java文件生成class文件,classpath正確。

查看問題選項卡並檢查您的項目是否缺少某些內容/文件。 您可以創建一個新的 proj 並一個一個添加文件並構建它們,直到它停止編譯和創建類(檢查工作空間/proj/bin/package/文件夾中的類)

它奇怪但真實,ecplise 編譯失敗,因為 20 個 java 文件中有 4 個使用了丟失的單個圖像。 結果沒有編譯任何java文件。

CLASSPATH 在這里不是問題。”

我所做的只是 Properties -> Java Build Path -> Order and Export -> 啟用所有未選中的框 -> 一直向上移動 Junit

試過

Link : [here][1]

Open your run configurations
Click on the jUnit-Test you want to start
go to the classpath tab
Try to add a folder (click on user entries, click on advanced, click on add folders,click on ok and search the outputfolder for your test classes(those you find under projektproperties java build path, source))

之后工作

Maven 2 生命周期 >> 測試

我已經嘗試了此頁面上的所有解決方案:刷新項目、重建、清理所有項目、重新啟動 Eclipse、重新導入(甚至)項目、重建 maven 並刷新。 沒有任何效果。 所做的工作是將班級復制到一個運行良好的新名稱- 奇怪但真實。

在忍受了一段時間之后,我只是通過以下方式修復了它:

  1. 通過Run菜單
  2. 選擇Run Configurations
  3. 選擇與您的單元測試關聯的運行配置。
  4. 通過按刪除或單擊紅色 X 從Run Configuration刪除條目。

緩存的運行配置一定是搞砸了。

來自 Eclipse 內部的 JUnit 測試也給了我 NoClassDefFoundError。 從命令行運行“mvn clean test”在幾個 jars 上給了我以下錯誤:無效的 LOC 標頭(錯誤的簽名)從本地 m2 存儲庫中刪除這些 jars 並再次運行“mvn clean test”解決了我的問題。

我有同樣的問題。 我所做的一切都是,

一世)。 生成的 Eclipse 工件

mvn clean eclipse:eclipse

ii). 刷新項目並重新運行您的 junit 測試。 應該工作正常。

我解決了 Bulit 路徑---> 庫---> 添加庫---> Junit 檢查 junit4

通常在運行java應用程序java工具找不到類文件時會出現這個問題。

大多數在 Maven 項目中我們看到這個問題是因為Eclipse-Maven 同步問題。 解決這個問題: Maven->更新配置

我建議嘗試將其添加到 VM 參數中;

-verbose:class -verbose:module -Xdiag

然后你可以從 Eclipse 調試它,它應該打印出一些類似的消息;

java.lang.ClassNotFoundException: org.adligo.somewhere.Foo
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)
    at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:760)
    at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)

由此您可以在 LancherHelper.java 760 上設置斷點以調試 Eclipse Lanucher 本身。 就我而言,我注意到用戶類路徑似乎為空,即使我在 Lanuch 配置中有很多 jar。

確保您的測試班之前是否正常工作,但您突然遇到了問題。 然后清理您的項目並重新構建它 確保已按照上述文章在構建路徑中配置項目。

那么,你基本上可以通過創建一個新項目來解決這個問題。

  1. 關閉項目(將代碼保存在計算機上的另一個文件夾中)。
  2. 創建一個新項目(添加一個新的最終目錄,不要保留選擇的默認目錄)。
  3. 添加之前保存的代碼,重新制作之前的項目。

發生這種情況可能是因為您創建了一個項目並且沒有選擇目錄/文件夾或類似的東西。 我希望對你有幫助!

單擊project->properties->Java build path->Source並檢查每個src文件夾是否仍然有效存在或最近刪除。 更正任何丟失的路徑或不正確的路徑並重建並運行測試。 它將解決問題。

您是否嘗試過右鍵單擊項目根目錄,選擇“屬性”,並確保CLASSPATH是正確的? 如果我沒記錯的話,這就是您的做法。

關於Eclipse運行單元測試的方式,是否需要以特殊方式將junit JAR添加到運行時CLASSPATH中?

我使用IntelliJ,因此沒有這些問題。

我自己檢查Eclipse,但我更喜歡不在桌面上使用它。

嗯,看起來有些奇怪,請嘗試在類頂部使用以下注釋運行它:

@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}

讓我知道你如何處理它。

檢查您是否也自動啟用了構建。 如果要確保正確編譯測試類,請清除Maven目標文件夾(以及Eclipse可能正在使用的任何bin文件夾)。 您是否也在使用m2eclipse,因為我發現它有點問題。

請從 Windows > Preferences > Java > Installed JRE 指向正確的 JDK。

不要指向jre,指向一個合適的JDK。 我指向 JDK 1.6U29 並刷新了項目。

此后,問題消失了,jUnit 測試工作正常。

謝謝,
-小吃

我最近在 Eclipse 中遇到了同樣的錯誤,即無論我如何更改配置,Eclipse IDE 都找不到單元測試類。 從這里和其他網站的先前帖子中學習,我已經仔細檢查了類路徑和源信息,並在“運行配置”和“Java 構建路徑”中上下移動了源文件夾和庫" 配置窗口,我還清理了項目並重建了它,但沒有任何技巧對我有用。 具體的 Java 項目是一個舊的 ANT 編譯項目,並且在 Eclipse 庫中包含了很多 jar。

然后,我更改了單元測試類以添加一個 main() 方法並右鍵單擊它以“作為 Java 應用程序運行”而不是 JUnit 測試,突然之間,Eclipse 似乎喚醒並正確識別了該類。 之后,我將其切換回單元測試應用程序,它仍然可以工作。

這似乎是 Eclipse 中的一個錯誤,我猜大量的庫(> 260)可能會混淆 JVM 定位我的 JUnit 類的能力。

我嘗試了我在這篇長文章中讀到的所有內容,令人難以置信的是,對我有用的是,而不是單擊測試類並選擇Run as JUnit test ,單擊測試方法並作為JUnit test運行。 我不知道為什么?

從 eclipse (不是從硬盤)中刪除項目,這在某種程度上是清理工作區並將項目重新導入 eclipse 再次為我工作。

此外,請雙擊月食“ Web Deployment Assembly”對話框。

可以找到:項目屬性->部署程序集。

最近,我有一個eclipse插件修改了我的一個Web項目,它神秘地添加了〜將Maven測試目錄/ src / test / java,/ src / test / resources添加到了Deployment Assembly。 哎呀!

這就是為什么當我僅將maven直接構建並部署到tomcat,沒有ClassNotFoundExceptions時,我的項目運行良好的原因,但是,當我通過Eclipse進行部署時,Whammo! 我開始獲取ClassNotFoundExceptions,因為正在部署TestCode。

埃里克

這意味着您的pom.xml存在未解決的問題。 打開問題視圖即可相應解決。 然后,您將能夠成功運行測試用例,而不會遇到classnotfoundexception。

更改 Java 構建路徑中類路徑工件的順序為我解決了這個問題。

  1. 右鍵單擊項目並轉到項目構建路徑。
  2. 轉到 Order and Export 選項卡並將 JRE 系統庫移動到源之后。

這應該解決它。

JMockit/JUnit 集成不支持 JUnit 4.4。 僅支持 4.5 或更高版本。

解決我的問題的方法是相似的:庫無效。 如果查看項目的.classpath文件,將看到帶有鍵/值kind =“ lib”的classpathentry標簽。 我的一些不正確。

在關閉驗證設置之前,我沒有發現這一點。 就是說,JSP文件中存在如此多的錯誤,以至於類路徑錯誤並不明顯(甚至可能顯示出來)。 結果,沒有任何內容被編譯到目標輸出文件夾中,但是沒有有用的錯誤提示。

在運行 Web 應用程序時,我們大多數人都會遇到此異常。 當您收到此錯誤時,您已將 .class 文件放在正確的文件夾中。

在 Web 應用程序中,所有 .class 文件都應位於 WEB-INF\\Classes 文件夾中。 如果您在 Eclipse 中運行 Web 應用程序,請按照以下步驟操作

第 1 步:右鍵單擊“項目”文件夾並選擇“屬性”第 2 步:單擊“Java 構建路徑”,您將看到不同的選項卡,例如“源”、“項目”、“庫”等第 3 步:選擇源文件夾。 在此之下,您將看到您的項目詳細信息 第 4 步:在“源”文件夾中,您將看到“默認輸出文件夾”選項。 在這里你必須在WEB-INF下給出classes文件夾。 只需提供像 projectname/WebContent/WEB-INF/classes 這樣的路徑,結構取決於您的應用程序,請記住這里您無需創建“classes”文件夾。 Eclipse 將為您創建它。 第 5 步:單擊“確定”並清理和構建項目。 就是這樣,您的應用程序現在將運行。

我在運行 junit 測試時看到了 Eclipse - java.lang.ClassNotFoundException。 我刪除了添加到項目中的外部 jar 文件之一。 從 Eclipse 中刪除此 jar 文件對項目的引用后。 我可以運行 Junit 測試。

轉到 Build Path -> Source 並為所有源文件夾切換到 Yes 選項“Ignore Optional Compile Problems”。

我遇到了同樣的問題,對我來說問題是不同的。 是因為有些maven依賴沒有下載下來。

a. I went through properties -> Java Buildpath -> Maven Dependencies and identified the missed libraries. 
b. Removed the missed libraries artifacts from pom.xml
c. Downloaded the libraries and added them explicitly.

我也遇到了這個問題,並且能夠為我的案例提出足夠的解決方案。 如果您的 Eclipse 項目在您的項目根目錄中有一個 .classpath 文件(在導航器視圖而不是包資源管理器視圖中查看它),請確保您的 Maven 類路徑出現在您的 JRE 容器類路徑之前。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

如果您的項目沒有 .classpath 文件,您可以編輯項目的 Java Build Path 以切換 Order 和 Export。 如果您的項目具有 .classpath 文件並且您只更改了 Java Build Path 中的排序,您將看到排序沒有受到影響並且問題將繼續發生。

在您進行更改后,項目->清理永遠不會傷害任何事情。

將項目作為 Maven 測試運行,然后作為 JUnit 測試運行。

確保您的測試啟動配置不包含以下行,或者嘗試啟用自動化 Maven 依賴項管理。

<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>

如果這些在 eclipse 中不起作用,請嘗試: Alt + Shift + X ,您將在屏幕右下角看到 5 個選項。 選擇 Java 應用程序,它會工作

對於 Hybris 項目,我通過在構建路徑中應用以下更改來解決問題。 我選擇了 Project 並單擊 Apply and Close。

在此處輸入圖像描述

我將 gradle 與 eclipse 一起使用,今天面臨同樣的挑戰,並嘗試了多種方法來解決,但對我有幫助的唯一方法是運行命令gradlew clean

PS => 不要將“構建”與上述命令結合使用。

幫助我,試試你的運氣。

它是非常古老的七月(哪一年),但我遇到了同樣的問題。

實際問題發現eclipse無法為java文件生成class文件,classpath是正確的。

查看問題選項卡並檢查您的項目是否缺少某些內容/文件。 您可以創建一個新項目並一個一個地添加文件並構建它們,直到它停止編譯和創建類(檢查 workspace/proj/bin/package/ 文件夾中的類)

奇怪但真實的是,ecplise 無法編譯,因為 20 個 java 文件中有 4 個使用的是一個丟失的圖像。 結果沒有編譯任何 java 文件。

CLASSPATH 在這里不是問題。

暫無
暫無

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

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