2015-03-31 242 views
2

我试图做的Restlet工作与杰克逊的Java代码:的Restlet和杰克逊:java.lang.NoClassDefFoundError:组织/ Codehaus的/杰克逊/ JsonFactory

public class HelloWorldResource extends ServerResource{ 
    @Get("json") 
    public Todo represent() 
    { 
     Todo t = new Todo(); 
     t.setId("1"); 
     t.setDescription("hello"); 
     t.setSummary("world"); 

    return t; 
    } 
    //... 
} 

当我运行该程序,我得到错误:

java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory

这是我使用的罐子:

enter image description here

为什么找不到依赖关系?

编辑:

我加入这个jar到classpath中解决了这个问题。

我仍然有兴趣知道在我添加的罐子里是否有一些错误/冗余。

+0

你应该问自己的问题是:“我如何强制这个依赖包含在我的最终jar中听起来好像你正在尝试用类似'java -jar your_jar_file.jar'的方式来运行裸JAR文件并且得到了NoClassDefFoundError .Java告诉你这个问题:“我试图运行jar,我不知道xyfoobar是什么!“。将依赖项填充到jar中会产生后果,因为它可能会导致最终的罐子很大。参见:http://stackoverflow.com/questions/1729054/including-dependencies-in-a-jar-with-maven – 2016-07-05 15:52:35

回答

1

您应该使用Maven配置您的应用程序。这样,我们将自动拥有所有必需的依赖关系(包含依赖关系的依赖关系)。

在你的情况,我们可以使用类似的东西,你的文件pom.xml内:

<?xml version="1.0" encoding="UTF-8"?> 
<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>org.restlet</groupId> 
    <artifactId>restlet-maven-sample</artifactId> 
    <name>${project.artifactId}</name> 
    <packaging>war</packaging> 
    <version>1.0.0-snapshot</version> 

    <properties> 
     <restlet-version>2.3.1</restlet-version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.restlet.jee</groupId> 
      <artifactId>org.restlet</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.restlet.jee</groupId> 
      <artifactId>org.restlet.ext.jackson</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.restlet.jee</groupId> 
      <artifactId>org.restlet.ext.servlet</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.restlet.jee</groupId> 
      <artifactId>org.restlet.ext.xml</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>maven-restlet</id> 
      <name>Public online Restlet repository</name> 
      <url>http://maven.restlet.com</url> 
     </repository> 
    </repositories> 
</project> 

希望它可以帮助你, 蒂埃里