2016-06-09 54 views
3

我知道該插件正確加載,作爲其他方法的工作,如spatial.procedures和spatial.addNode等Neo4j的空間服務器插件失敗的withinDistance和最親密的java.lang.NoClassDefFoundError

錯誤後的結果像這樣的電話:

CALL spatial.withinDistance('profile_geo', [43.524, 96.7341], 500) 

,並導致該錯誤是這樣的:

Failed to invoke procedure `spatial.withinDistance`: Caused by: java.lang.NoClassDefFoundError: org/neo4j/cypher/internal/compiler/v3_0/commands/expressions/GeographicPoint 

試圖用最接近的功能逢時,出現同樣的錯誤湖任何幫助,將不勝感激。

+0

哪個版本的Neo4j Spatial與哪個版本的Neo4j一起運行? –

+0

neo4j-community-3.0.2和neo4j-spatial-0.17-neo4j-3.0.2-server-plugin.jar – kamranjon

+0

我在使用CYPHER時遇到同樣的問題,並試圖使用neo4j-spatial v0.16和v0.17(參考:http://stackoverflow.com/questions/37837663/neo4j-spatial-3-0-2-no-index-provider-spatial-找到@邁克爾亨格的回答下的第一個評論)。當使用REST路徑時,它可以工作:''/ db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance''。這事有進一步更新嗎? – Joran

回答

0

它看起來你缺少必需的Jar for GeographicalPoint類。 請確保你在你的罐子裏有這個課程。我知道這個類存在於neo4j-cypher-compiler-3.0-3.0.3.jar但它不會爲你工作,因爲它駐留在不同的命名空間。如果您無法在您的環境中查找相應的Jar,請查看Maven存儲庫並嘗試在其中找到它。

+2

服務器插件是預編譯的擴展,這個類不應該被編譯到擴展中嗎? – kamranjon

0

簡短的回答:升級到3.0.3(兩者的Neo4j和插件)

長回答:

我今天遇到了完全一樣的問題。我是運行版本3.0.2與服務器插件3.0.2版本,並運行CYPHER查詢:

CALL spatial.withinDistance("spatial_records",{lon:20.0,lat:50.0},100000000) 

Joran在評論上面說的REST API是一個工作的替代提及。所以我試了一下,發現他確實是對的。

我測試了使用httpie,用下面的命令:

cat tmp.json | http :7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance 

其中tmp.json樣子:

{"layer" : "spatial_records","pointX" :3.9706,"pointY" : 46.7907,"distanceInKm" :10000000000} 

雖然這個作品,使用CYPHER使用存儲過程將是很好。因此,在進一步的調查,我注意到,最近commit包含以下變化:

-  <neo4j.version>3.0.1</neo4j.version> 
+  <neo4j.version>3.0.3</neo4j.version> 

... 

-import org.neo4j.cypher.internal.compiler.v3_0.commands.expressions.GeographicPoint; 
+import org.neo4j.cypher.internal.compiler.v3_0.GeographicPoint; 

所以我結束了下載二者的Neo4j和空間插件3.0.3版本。無論以前是什麼問題,似乎都在這個版本中得到修復。對存儲過程的調用現在按預期工作!