2012-01-15 59 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