2015-12-02 2 views
0

Я пытаюсь выполнить простой тест JUnit, чтобы сортировать/отменять некоторые данные.Интеграция jaxb2-maven-plugin с JUnit4

Вот определение «данных»:

@XmlRootElement(name = "data") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Data { 
public Data(){} 
@XmlAttribute(name = "name") 
private String name = "name"; 
public String getName(){return this.name;} 
public void setName(String name){this.name = name;} 
} 

приложение работает отлично (я могу маршалом/маршализацию этот объект, как XML)

Но когда я выполнить тест, у меня есть следующая ошибка (код в тесте точно так же, как и в приложении):

java.lang.NoClassDefFoundError: com/sun/istack/Pool 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1138) 
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:162) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at javax.xml.bind.ContextFinder.newInstance(Unknown Source) 
at javax.xml.bind.ContextFinder.newInstance(Unknown Source) 
at javax.xml.bind.ContextFinder.find(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at com.c42.asset.doubleface.data.Data.xml(Data.java:48) 
at com.c42.asset.doubleface.data.MainTestXML.main(MainTestXML.java:68) 
at com.c42.asset.doubleface.data.DataTest.setUpBeforeClass(DataTest.java:31) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.ClassNotFoundException: com.sun.istack.Pool 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 30 more 

Я не могу понять, почему приложение работает, но не тест. Я думаю, что есть что-то о области плагина, определенной в maven. Вот мой pom.xml:

<dependencies>  
    <dependency> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>jaxb2-maven-plugin</artifactId> 
     <version>2.2</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>mockit</groupId> 
     <artifactId>jmockit</artifactId> 
     <version>0.999</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxb2-maven-plugin</artifactId> 
      <version>2.2</version> 
      <configuration>     
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

ответ

1

Вы не должны использовать jaxb2-maven-plugin в зависимости.

И вы, возможно, придется добавить

 <dependency> 
      <groupId>com.sun.xml.bind</groupId> 
      <artifactId>jaxb-core</artifactId> 
      <version>2.2.11</version> 
     </dependency> 
+0

Ok .I удалены "jaxb2-Maven-плагин" зависимость (только в теге 'зависимостей'), и я добавил 'JAXB-жильный' зависимость. Он работает хорошо! Даже если я не понимаю, почему это работает так хорошо :) –

0

Try для добавления в зависимости:

<dependency> 
    <groupId>com.sun.istack</groupId> 
    <artifactId>istack-commons-runtime</artifactId> 
    <version>2.22</version> 
</dependency> 
Смежные вопросы