2017-10-16 69 views
0

用我的pom.xml如下:的Maven /進口基礎知識 - 找不到類

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20170516</version> 
</dependency> 

然而,我很感興趣,在我的代碼不被識別的JSON類然後我嘗試(例如,JSONArray。)進口:

import org.json.*; 

在這種情況下,一切編譯,但是我碰到下面的,當我運行代碼:

org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/json/JSONArray 

我似乎找到表明我需要在我的類路徑中使用json.jar的引用,但是對於已建立的Maven依賴關係(我的首選解決方案)還是導入調用,這應該是非常必要的嗎?

在此先感謝

回答

1

您的類路徑中需要json.jar。它通常從maven倉庫下載到你的m2文件夾中。 m2文件夾應該在你的類路徑中。

你如何建立你的maven項目,mvn乾淨安裝?

+0

我的項目是在IntelliJ中 - 它被定義爲一個「maven項目」。我沒有在項目的任何地方看到m2文件夾。我嘗試重新導入pom.xml無濟於事。 – Tiggyboo

+0

你在運行什麼操作系統。 m2文件夾(linux/MacOS)位於〜/ .m2在Windows上不確定。但我認爲當你通過IntelliJ或任何其他IDE運行Maven項目時,他們應該下載依賴關係。 – Idlepoze

+0

MacOS - 謝謝,我確實找到它了: 'R0229283:.m2 afs01 $ tree | grep的JSON │├──JSON ││└──JSON ││├──JSON-20170516.jar ││├──JSON-20170516.jar.sha1 ││├──JSON-20170516.pom ││└──json-20170516.pom.sha1' 我會嘗試將其添加到類路徑。 – Tiggyboo

1

這完全取決於您的項目包裝類型。

  1. 如果它是JAR,那麼您有責任爲運行時提供依賴性瓶。對於任何Java應用程序,可以通過多種方式完成:通過CLASSPATH環境,JVM的-cp參數,在JAR文件MANIFEST文件中定義位置,或者通過創建一個包含所有依賴關係的胖jar包來實現。

(注:如果您使用的IDE像Eclipse - 它會爲你當你跑在它的代碼它包括所有的Maven的依賴關係到運行的類路徑,但不是IDE之外的真正運行時)。

  • 如果是WAR或EAR與範圍compileruntime所有依賴將被包括到WAR/EAR文件,將可用於您的代碼。但是,如果範圍是provided - 它會回到JAR的相同。 provided當需要依賴項位於運行WAR/EAR的Application Server類路徑中時,該範圍非常有用。它可以防止在每個WAR/EAR和可能的版本衝突中打包常見的依賴關係。