2012-07-09 130 views
6

我收到以下錯誤 - 我在我的依賴項中添加了GSon-GSON未被導入到maven項目中

有人可以指出我做錯了什麼嗎?

enter image description here

編輯:指定的依賴 -

<dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>1.7.1</version> 
    </dependency> 

我使用下面的代碼在我sevlet -

JSONService json = new JSONService(); 
    String json_output = json.makeLoginJSON(user); 

makeLoginJSON ---

public String makeLoginJSON(LoginDetails user) { 
    String FinalJson = null; 
    Gson gson = new Gson(); 
    FinalJson = gson.toJson(user);  
    return FinalJson;  
} 
+0

你的maven依賴聲明是什麼? – 2012-07-09 20:32:10

+0

你用什麼來建立你的項目?並且請發佈你的依賴配置 – Dave 2012-07-09 20:33:50

+0

它是可訪問的,請嘗試更新Maven依賴關係,如果它不起作用,請嘗試從本地Maven存儲庫中刪除包並強制它再次下載。試用一個新版本也可以。 – 2012-07-09 20:37:56

回答

11

Try:

<dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
</dependency> 

我編輯了我的評論並添加了範圍。缺省範圍是編譯,這意味着依賴項在運行時不存在。爲此,您使用提供的範圍。更多關於Apache的Introduction to Maven Dependencies的maven依賴關係的範圍。

希望這可以解決您的問題。

P.S .:如果你正在創建你自己的倉庫,你還應該看看here

+0

Eclipse不會給我任何錯誤...我可以做「import com.google.gson.Gson;」 – Fox 2012-07-09 21:01:52

+0

您是否嘗試手動將Gson庫添加到項目的類路徑中?以便您瞭解這是否是Maven的問題。我想,最有可能是一個classpath的問題,雖然Maven的應該teoretically解決(詳見:http://stackoverflow.com/questions/4961336/i-am-getting-java-lang-classnotfoundexception-com-google- gson-gson-error-even) – 2012-07-10 06:55:34

-1

嘗試:

<dependency> 
    <groupId>com.alibaba</groupId> 
    <artifactId>fastjson</artifactId> 
    <version>1.1.21</version> 
</dependency> 

非常快,使用簡單。

VO obj = ...; 
String jsonString = JSON.toJSONString(obj); 

VO obj2 = JSON.parseObject(jsonString, VO.class); 
+0

Downvoted,因爲這不是問題的答案。 – pizzamonster 2016-04-22 20:07:13

3

對勞爾的回答只是澄清 - 好,它爲你工作,但提供是對於那些預計將在JRE/JDK的依賴關係,即servlet類。編譯是默認的,應該在其他人的情況下工作,因爲gson不能從JRE獲得,而需要由maven下載。從http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

編譯 這是默認範圍,如果沒有指定,則使用。編譯依賴關係在項目的所有類路徑中都可用。而且,這些依賴關係會傳播到依賴項目。

提供 這很像編譯,但表示您期望JDK或容器在運行時提供依賴關係。例如,在爲Java Enterprise Edition構建Web應用程序時,您可以將Servlet API和相關Java EE API的依賴性設置爲範圍,因爲Web容器提供了這些類。此範圍僅在編譯和測試類路徑中可用,且不是傳遞性的。

運行時 此範圍表示依賴項不需要進行編譯,而是用於執行。它在運行時和測試類路徑中,但不在編譯類路徑中。

測試 此範圍表示該依賴關係不是必需的正常使用的應用程序的,並僅可用於在測試編譯和執行階段。

system 該範圍與提供的範圍相似,只是必須明確提供包含它的JAR。工件始終可用,並且不會在存儲庫中查找。

import(僅在Maven 2.0.9或更高版本中可用) 此作用域僅用於段中的類型pom的依賴關係。它表明指定的POM應該替換爲該POM部分中的依賴關係。由於它們被替換,因此具有導入範圍的依賴關係實際上並不參與限制依賴關係的傳遞性。

+0

謝謝你這篇文章! – user123321 2013-09-09 03:46:58