获取java.lang.ClassNotFoundException:com.google.gson.Gson用于maven项目

时间:2014-08-31 08:38:55

标签: java json maven gson

我是maven的新手。我正在使用apache-maven-3.2.2来构建我的项目。这个简单的项目将从客户端和服务器端接收json数据,它会将这个json数据转换为类似的java类。为了将json转换为java格式,我们使用google的Gson库。没有maven我的项目正常运行。但是当我将它转换为maven时,我收到了以下错误:

   Caused by: java.lang.NoClassDefFoundError: com/google/gson/Gson
   at com.edfx.tsn.web.controller.DataController.transferData(DataController.java:51) [classes:]
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_17]
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_17]
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_17]
   at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_17]
   at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
   at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
   at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
   at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
   ... 22 more

从错误中可以清楚地知道它无法使用Gson jar。

现在下面是我的pom.xml文件

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>TestJSON</groupId>
   <artifactId>TestJSON</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>TestJSON</name>
  <build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.6</version>
    </dependency>
  </dependencies>
   <packaging>war</packaging>
  </project>

我在编译时没有收到任何错误,我的项目正在正确部署。我正在使用Jboss7。但是当我的actionListener方法被调用时,我在运行时收到此错误。

我已经在stackoverflow中经历了几个链接,特别是下面的一个

GSON is not being imported into the maven pproject

但它没有达到我的目的。任何人都可以提供任何解决方案。谢谢。

4 个答案:

答案 0 :(得分:2)

1. go to your repo location and check if the jar is properly downloaded.
2. unpack your WAR and check if the jar is actually available in it.
3. althoug your maven dependency looks fine, but just try using this: 
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.3</version>
    </dependency>
4. Make sure you do a mvn clean:install -P from command prompt location of the project.
5. I tried with the same dependency and it works fine with JBOSS too.

答案 1 :(得分:1)

在Gradle中我添加了以下内容并且错误消失了。我正在努力建立宁静-BDD项目

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'

我的依赖关系如下:

   dependencies {

    def SERENITY_VERSION = "1.6.7-rc.1"
    compile 'net.serenity-bdd:serenity-core:' + SERENITY_VERSION
    compile 'net.serenity-bdd:serenity-rest-assured:' + SERENITY_VERSION
       compile group: 'net.serenity-bdd', name: 'serenity-cucumber', version: '1.1.36'

    compile group: 'info.cukes', name: 'cucumber-core', version: '1.2.5'
    testCompile 'org.assertj:assertj-core:3.1.0'
    testCompile 'com.googlecode.lambdaj:lambdaj:2.3.3'
    testCompile 'io.codearte.jfairy:jfairy:0.5.3'
    compile 'net.serenity-bdd:serenity-screenplay:' + SERENITY_VERSION
    compile 'net.serenity-bdd:serenity-screenplay-webdriver:' + SERENITY_VERSION
    compile 'net.serenity-bdd:browse-the-web:1.1.34'
    testCompile 'net.serenity-bdd:serenity-junit:' + SERENITY_VERSION
   '3.5.3'
    testCompile 'org.slf4j:slf4j-simple:1.7.12'
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'}

答案 2 :(得分:0)

在主pom.xml上添加以下依赖项 然后进行干净的构建和测试    <dependency>         <groupId>com.google.code.gson</groupId>         <artifactId>gson</artifactId>         <version>1.7.1</version>     </dependency>

答案 3 :(得分:0)

确保最新的gson jar文件可用于您的项目/应用程序。如果不确定或不确定,请转到https://github.com/google/gson并阅读readme.md文件。 “下载”部分底部的链接是https://maven-badges.herokuapp.com/maven-central/com.google.code.gson/gson。在登录页面上,单击右上角的“下载(文件下载)”链接以访问最新的jar文件。下载的文件,并确保您的项目/应用程序现在可以访问它。确保将gson jar文件正确包含在您的分布式软件包中,并且已为您的客户端正确安装。

注意:gson jar文件的所需位置将取决于您的执行环境和所使用的开发工具。我目前在Windows上使用Eclipse,必须将gson jar文件包含在“引用的库”下。