2011-12-10 49 views
0

我們使用Java技術在Windows平臺上使用MAPSERVER(V6.0.1)編寫並運行了一個動態Web應用程序。現在,需要在Ubuntu 11.10上部署它。我們已經安裝了Apache Tomcat 6.0,Mapserver 6.0.1,Apache 2.0和FWTools-2.0.1(因爲這個軟件包包含了所有必需的mapserver工具,如果我沒有錯的話,所以我沒有感覺到任何其他工具要安裝) 。我們已經在Apache Tomcat的Webapps文件夾中部署了war文件(並且沒有將應用程序)。我什至沒有與mapscript api相關的代碼索引頁。不過,雖然獲取其他的servlet與我們得到以下錯誤mapscript ...UnsatisfiedLinkError和NoClassDefFoundError:在Ubuntu 11.10上運行Java Mapscript

java.lang.UnsatisfiedLinkError: no mapscript in java.library.path 
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) 
java.lang.Runtime.loadLibrary0(Runtime.java:840) 
java.lang.System.loadLibrary(System.java:1047) 
edu.umn.gis.mapscript.mapscriptJNI.<clinit>(mapscriptJNI.java:23) 
edu.umn.gis.mapscript.mapObj.<init>(mapObj.java:283) 

再次刷新時顯示時所在上述錯誤的瀏覽器頁面,我得到了改變,

java.lang.NoClassDefFoundError: Could not initialize class  
edu.umn.gis.mapscript.mapscriptJNI 
edu.umn.gis.mapscript.mapObj.<init>(mapObj.java:283) 

我搜索在網上關於上述問題。但最後還是空白。請提供關於上述問題的想法。

回答

0

我會檢查下列2項:

  1. 是在mapscript.jar文件在Tomcat或至少你的web應用的classpath? (NoClassDefFoundError是您的主要線索)
  2. libmapscript.so是您的LD_LIBRARY_PATH還是-Djava.library.path? (UnsatisfiedLinkError因爲共享對象無法找到)

嘗試在這個post有一看,附近正在運行的Java Mapscript(在Linux上)部分。

希望有幫助!

+0

你已經完成了。即使我也做了第二個,但問題是,我沒有找到任何名稱libmapscript.so任何地方安裝mapserver和根(/ Ubuntu的)。刷新瀏覽器時,UnsatisfiedLinkError消失,我得到Ony NoClassDefFoundError。 – Vish

+0

'''libmapscript.so'應該在您的Linux服務器的編譯步驟中創建。你可以發佈你的'configure'選項嗎? (c.f. http://trac.osgeo.org/mapserver/wiki/JavaMapscriptUsing#againstFwtools) – buruzaemon

+0

我已經根據那篇文章做了所有事情,你有共享鏈接作爲文章。我們沒做的一件事就是製作和測試界面。這是必要的嗎? – Vish

2

我不打算解釋爲什麼你會得到UnsatisfiedLinkError,但我會解釋爲什麼當你重新加載頁面時你得到NoClassDefFoundError。

當JVM嘗試初始化已嘗試並未初始化的類時,JVM拋出NotClassDefFoundError消息Could not initialize class ...

前你的兩個蹤跡的包含線

 
edu.umn.gis.mapscript.mapscriptJNI.<clinit>(mapscriptJNI.java:23) 

方法名<clinit>表示類mapscriptJNI的靜態初始化。所以,在拋出UnsatisfiedLinkError的時候,JVM試圖初始化這個類。看看錯誤消息,看起來這個靜態初始化器試圖加載本地代碼庫mapscript但失敗。

此UnsatisfiedLinkError導致mapscriptJNI類無法成功初始化。 JVM記錄了所有未初始化的類,如果您嘗試再次初始化其中一個類,則會收到一條NoClassDefFoundError消息,指出它無法初始化該類。

刷新頁面時,最終導致JVM第二次嘗試初始化類mapscriptJNI。當然,這個班上次沒有初始化。你的第二個堆棧跟蹤包含了我所描述的錯誤。

總之,UnsatisfiedLinkError是真正的錯誤。解決這個問題,另一個將會消失。

+0

@Luke關於mapserver配置和獲取'libmapscript.so'的任何建議? – Vish

+0

@Vish:除了遵循Buruzaemon所說的,沒有。 –