idea編譯後找不到引用類
① intellij IDEA為什麼我代碼編譯的時候沒有問題 但是maven打包的時候報錯找不到類代碼中都import過了啊
兩者配置的CLASSPATH(Maven的依賴),相同嗎
② IDEA Gradle 找不到或無法載入主類 a.AB Exception in thread "main" java.lang.NoClassDefFoundError

java java.lang.NoClassDefFoundError 的解決辦法
(2008-12-23 01:14:03)轉載▼
標簽:
java
noclass
deffound
解決辦法
以簡單而經典的 「HelloWorld.java」 為例
不含包層次的HelloWorld.java
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
保存在E:javasrc下,命令行下,改變當前路徑到:E:javasrc,使用javac命令編譯:
E:javasrc>javac HelloWorld.java
運行:
E:javasrc>java HelloWorld
屏幕列印出:
Hello World!
初學者常犯的錯誤
1. 運行時,帶了.class後綴
如果你試圖使用如下命令:
E:javasrc>java HelloWorld.class
系統會誤認為你運行的是HelloWorld包下的名為class的類文件,會到系統的CLASSPATH下(一般都包括當前目錄)企圖尋找 HelloWorld.class.class這樣的類,這樣的類當然不存在了;並且也不可能存在,因為class是關鍵字,不能作為一個類的名字。所以 會報如下錯誤信息:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
2. 文件名大小寫錯誤
對於像Windows這樣的系統,編譯時可以不關心大小寫。比如編譯HelloWorld.java時,也可以使用:
E:javasrc>javac helloworld.java
也可以編譯通過,但產生的類文件仍然是和源文件相符的:HelloWorld.class。
但在運行時一定要注意大小寫,比如試圖使用如下命令運行:
E:javasrc>java helloworld
將報類似於1中的錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)
包含包層次的HelloWorld.java
比如上面的HelloWorld.java修改如下:
package org.javaresearch;
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
編譯時有兩種方法
1. 直接編譯
E:javasrc>javac HelloWorld.java
此時在當前目錄下輸出HelloWorld.class。此時,運行不能使用上面相同的方法,使用:
E:javasrc>java HelloWorld
運行時,出現如下錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
從上述錯誤信息你也可以看到,系統可以找到HelloWorld類(因為當前路徑包含在CLASSPATH中,具體為什麼會提示wrong name,有興趣的朋友參見Java語言規范),但這個類屬於org.javaresearch包。所以,你要做的就是按照上述包層次,相應的創建目錄層 次,把上面生成的HelloWorld.class放到E:javasrcorgjavaresearch目錄下。運行(這時候是在包層次的最高層目錄下運行的):
E:javasrc >java org.javaresearch.HelloWorld
系統列印出:
Hello World!
這兒要注意的是,不能使用java orgjavaresearchHelloWorld來運行,此時同樣會出現如下錯誤:
Exception in thread "main" java.lang. (wrong name: org/javaresearch/HelloWorld)
因為類名的書寫是用句點來分割包名的層次的,引用java類庫裡面的類也可以這樣寫:java.util.List 類的全名就是這樣的,我們如果在 import 語句里寫上 import java.util.List;
那麼,就不用寫全名了,直接寫 List list = new ...;java 編譯器就可以知道是 List 什麼類.但是,由於,java.util 這個包 和 java.sql 這個包都有一個 Date 類,所以,如果 同時導入這兩個包,那麼會
導致java 編譯器不知道引用那個類,有兩種解決辦法:
a. 用全名來引用類:java.util.Date date1 = ...;java.sql.Date date2 = ...;
b. 不要導入整個包,只導入所需要的類,如果你同時需要這兩個 Date 類,那麼只能寫全名了,如果
你不是同時需要這兩個類,你可以只導入需要的包:
比如:import java.util.List; import java.sql.Date;這樣就不會沖突,因為編譯器可以十分清楚的區分
這個 Date 類是 java.sql 包中的, java.util 包中的 Date 類根本就沒有導入進來。
這一點,可以按照常理來理解,還是比較好理解的。
2. 使用 -d <directory>編譯選項
是不是覺得上面的編譯方法有點麻煩,能不能自動在當前路徑(或任意指定的路徑)下生成包層次呢?有!使用-d <directory>編譯選項就能做到。
E:javasrc >javac
(其中的點表示當前目錄。d 和 . 之間有空格, .和後面的java文件名之間也有空格)
此時,在當前目錄下就生成了一個orgjavaresearch目錄,並且輸出的.class文件也在裡面。運行:
E:javasrc >java org.javaresearch.HelloWorld
系統列印:Hello World!
如果你想把生成的類文件集中存放在一個目錄中,比如:E:javaclasses下,那麼你首先創建這個目錄,然後編譯時:
E:javasrc >javac -d E:javaclasses HelloWorld.java
就可以把生成的類文件放到E:javaclasses目錄下,並且按照包層次相應的創建目錄路徑。你可以在E:javaclassesorg javaresearch下找到HelloWorld.class文件。此時使用如下命令可以正確運行(注意如果要用到其它類,請在CLASSPATH中 設好):
E:javaclasses >java org.javaresearch.HelloWorld
③ idea打包jar,運行錯誤: 找不到或無法載入主類
一、場景
應個人需要,端午空閑時用java開發一個腳本,在打包時報了如下錯誤:
經過各種找資料,以及和之前打包且運行成功的jar做對比發現了不同所在
二、原因分析
具體原因還不是很清楚,待後續補充
三、問題解決
和可運行jar對比發現,META-INF下面多出這幾個文件,只需要刪除即可,原因待補充
④ idea找不到java.lang.object的類文件
檢查是否安裝。在idea中找不到文件,建議檢查一下是否安裝下載改文件,如果沒有,需要重新安裝,才能找到該文件。
⑤ 兩個java源文件同屬一個包,其中一個類引用了另一個,在用javac編譯時,報錯找不到引用的類,import無作用
確保import的類在classpath中,或者在本次編譯.java文件范圍內
⑥ 關於在IDEA中使用maven的運行test目錄下的main方法無法找到類的
pom.xml 報錯先調試好
測試類需要繼承TestCase
編譯後 arget est-classes下面要有class和測試需要的資源文件,就需要在pom.xml中加
<build><testResources><testResource><directory> src/main/resources</directory><filtering>true</filtering></testResource></testResources></build>
⑦ IDEA找不到或無法載入主類Application
1、刪除編譯文件,重新運行run
2、file-->invalidate Cache/restart,在彈出框點擊invalidate and restart,IDEA重啟
3、file-->project structure-->Mole 直接刪了,重新添加項目
⑧ idea找不到或無法載入主類,看圖,百度的方法沒有解決,求大神。
藉助idea找主類,需要嵌入jdk。
測試jdk找不到或無法載入主類。
嵌入需要安裝以後,正確配置環境變數。
⑨ idea加入依賴包後不提示引入類是什麼原因
在maven那個彈出界面左上角刷新一下,貌似不手動刷新你改了配置也不會自動更新。等他重新引入完,看看你的pom.xml里的dependency是不是紅的,如果是紅的就是沒找到你指定的資源
⑩ IntelliJ IDEA 找不到或無法載入主類 com.company.Main到底怎麼弄
如果是直接通過dos命令的話,就需要先編譯在運行。
如果是在開發工具裡面的話,完全沒問題。建議你用eclipse運行一下。
就代碼本身而言是沒有問題的,看是否是其他的問題。
