2012-07-09 103 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