2012-01-15 38 views
6

我試圖啓動Octopus Arm Benchmark(強化學習基準)。我下載了octopus-code-distribution.zipJAXB和Java 1.6的Java錯誤

java -jar octopus-environment.jar internal settings.xml 

開始章魚environment.jar,我得到了以下異常:

Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.bind.annotation.XmlAccessorType.value()Ljavax/xml/bind/annotation/AccessType; 
at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getAccessType(ClassInfoImpl.java:339) 
at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:228) 
at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:87) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:127) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:49) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:189) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:204) 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:327) 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:198) 
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76) 
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202) 
at javax.xml.bind.ContextFinder.find(ContextFinder.java:363) 
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) 
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522) 
at Main.main(Main.java:41) 

我已經一派的錯誤消息,這似乎是與我的Java問題版。我使用Java 1.6,它以某種方式與JAXB庫產生衝突。我認爲這將適用於Java 1.5。但我還沒有找出任何解決方法。

我希望你能幫助我。一些背景信息:我使用的是Ubuntu 11.04,我的Java版本是1.6.0_26。

+3

Java 1.6包含JAXB庫。不要使用外部JAXB jar。 – 2012-01-15 22:17:50

+0

看看你是否下載了Java 1.7版本而不是Java 1.6 – SHiRKiT 2012-01-16 00:38:58

+0

GregS:這不是我的代碼,我不想改變它。 SHiRKiT:代碼很老(〜2006),所以我猜它更可能用於Java 1.5。 – alfa 2012-01-16 10:00:46

回答

6

在JAXB 2.0中,AccessType重命名爲XmlAccessTypeAccessorType也重命名爲XmlAccessorType)。因此,JAXB早期快照的用戶都會遇到這個問題。所以,你有兩個選擇:

  1. 更新的源代碼,這樣就可以使用JAXB附帶的Java 6

  2. 覆蓋的JAXB實現與環境中使用的一個。文件octopus-environment.jar的清單文件中顯示所需要的文件在/ lib文件夾中存儲的,這樣你就可以運行

java -Djava.endorsed.dirs=./lib -jar octopus-environment.jar internal settings.xml

這充分利用了Java Endorsed Standards Override Mechanism這樣你就可以覆蓋出貨Java 6中默認的JAXB。

+1

我不想更改源代碼。選項2工作得很好。非常好的解釋。感謝您的時間! :) – alfa 2012-01-16 09:55:44