2015-03-31 189 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> 

希望它可以幫助你, 蒂埃裏