2016-11-23 25 views
0

我正在研究「Restlet in action」一書中的示例。我不使用任何IDE,Maven或其他東西。只是一個純粹的命令行。問題顯示資源類別:我應該添加多少罐以使應用程序正常工作?

import java.io.IOException; 

import org.restlet.data.Reference; 
import org.restlet.ext.jackson.JacksonRepresentation; 
import org.restlet.representation.Representation; 
import org.restlet.resource.Get; 
import org.restlet.resource.Put; 
import org.restlet.resource.ServerResource; 

public class MailServerResource extends ServerResource { 

    @Get 
    public Representation toJson() { 
     // Create the mail bean 
     Mail mail = new Mail(); 
     mail.setStatus("received"); 
     mail.setSubject("Message to self"); 
     mail.setContent("Doh!"); 
     mail.setAccountRef(new Reference(getReference(), "..").getTargetRef() 
       .toString()); 

     // Wraps the bean with a Jackson representation 
     return new JacksonRepresentation<Mail>(mail); 
    } 

    @Put 
    public void store(Representation rep) throws IOException { 
     // Parse the JSON representation to get the mail bean 
     JacksonRepresentation<Mail> mailRep = new JacksonRepresentation<Mail>(
       rep, Mail.class); 
     Mail mail = mailRep.getObject(); 

     // Output the JSON element values 
     System.out.println("Status: " + mail.getStatus()); 
     System.out.println("Subject: " + mail.getSubject()); 
     System.out.println("Content: " + mail.getContent()); 
     System.out.println("Account URI: " + mail.getAccountRef()); 
    } 
} 

包含此類的應用程序可以被編譯。但我有一個運行時異常,指出缺少的庫。每次添加缺失的庫時,我都會得到新的和新的異常,迫使我添加新的和新的庫。它似乎是無止境的。例如:

  1. 第一次編譯和運行應用程序的結果:OK。運行時錯誤而試圖從瀏覽器中的資源:

org.restlet.resource.ResourceException:內部服務器錯誤(500)產生的原因:java.lang.NoClassDefFoundError:COM/fasterxml /傑克遜/核心/ JsonFactory

  1. 將com.fasterxml.jackson.core.jar添加到編譯命令並運行命令後的結果:OK。運行時錯誤:

由java.lang.NoClassDefFoundError致毒相同的錯誤:COM/fasterxml /傑克遜/ DATAFORMAT /微笑/ SmileFactory

加入COM後
  • 結果。使用fasterxml.jackson.smile.jar編譯命令並運行命令:OK。運行時錯誤:
  • 由java.lang.NoClassDefFoundError致毒相同的錯誤:COM/fasterxml /傑克遜/數據綁定/ ObjectMapper

  • 加入com.fasterxml之後的結果。 jackson.databind.jar編譯命令並運行命令:OK。運行時錯誤:
  • 相同的錯誤由java.lang.NoClassDefFoundError致毒:COM/fasterxml /傑克遜/ DATAFORMAT/XML/XmlMapper

    而且因爲這個庫中的Restlet框架中缺失的這看起來很奇怪。所以我希望它不應該用在本書的例子中。但我無論如何去添加這個從網上下載的庫:

    1. 添加jackson-dataformat-xml-2.8.5.jar編譯命令並運行命令後的結果:好。運行時錯誤:

    由java.lang.NoClassDefFoundError致毒了同樣的錯誤:COM/fasterxml /傑克遜/ DATAFORMAT/YAML/YAMLFactory

    我放棄,請你幫忙......

    +0

    請注意,您不需要爲編譯命令添加額外的依賴關係 - 只要它編譯成功,編譯時類路徑就是正確的,從那時起,您只需將額外的依賴關係添加到運行時類路徑中即可。 – haggisandchips

    回答

    2

    那麼確切的說,你已經構建了管理Gradle,Ant + Ivy或Maven等傳遞依賴的工具(按照從最好到最差的順序)。

    如果您想堅持純命令行,請閱讀您使用的庫的文檔以查看它們具有哪些依賴關係,或者它們是否提供了包含所有依賴項的分發包,然後添加所有這些並且應該沒問題。

    +0

    我個人會反駁說這是我最差的訂單。 :P但是你知道他們對意見的看法 – DejaVuSansMono

    +0

    @DejaVuSansMono我會對你認爲Maven可能比Gradle更好的方式感興趣,但這不是討論它的地方。 :-) – Vampire

    1

    根據進口,org.restlet.jarorg.restlet.ext.jackson.jar都是需要的。首先是基礎框架,第二個是傑克遜功能支持。

    也許你還需要其他的罐子,但是你可以從restlet下載的zip文件中找到它們。下載並解壓縮它和罐子在lib文件夾中。

    相關問題