2015-05-26 26 views
4

我想用JAXB從WSDL生成類,並用Jsr303Annotations註釋並提供equals和hashcode的實現。如何讓JAXB註釋並提供equlas/hash代碼實現

這些都獨立工作,但是當我試圖達到兩個要求,然後我得到的錯誤:「建設工作區」:在發生

內部錯誤。 com.sun.tools.xjc.Plugin:提供org.jvnet.jaxb2_commons.plugin.fixjaxb1058.FixJAXB1058Plugin無法實例:java.lang.NoClassDefFoundError:組織/ jvnet/jaxb2_commons /反射/ UTIL /訪問者

有人能告訴我如何配置JAXB來執行這兩個操作嗎?

貝婁是我嘗試這樣做:

<plugin> 
       <groupId>org.jvnet.jaxb2.maven2</groupId> 
       <artifactId>maven-jaxb2-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>generate-wsdl</id> 
         <goals> 
          <goal>generate</goal> 
         </goals> 
         <configuration> 
          <schemaDirectory>src/main/resources</schemaDirectory> 
          <schemaIncludes> 
           <include>*.wsdl</include> 
<!--        <include>*.xsd</include> --> 
          </schemaIncludes> 
<!--       <forceRegenerate>true</forceRegenerate> --> 
          <!-- <removeOldOutput>true</removeOldOutput> --> 
          <!-- <cleanPackageDirectories>true</cleanPackageDirectories> --> 
          <strict>true</strict> 
          <extension>true</extension> 
          <args> 
           <arg>-XJsr303Annotations</arg> 
           <arg>-Xannotate</arg> 
           <arg>-Xequals</arg> 
           <arg>-XhashCode</arg> 
          </args> 
          <plugins> 
           <plugin> 
           <groupId>org.jvnet.jaxb2_commons</groupId> 
           <artifactId>jaxb2-basics-annotate</artifactId> 
           <version>0.6.3</version> 
           </plugin> 
           <plugin> 
            <groupId>org.jvnet.jaxb2_commons</groupId> 
            <artifactId>jaxb2-basics</artifactId> 
            <version>0.9.4</version> 
           </plugin> 
           <plugin> 
            <groupId>com.github.krasa</groupId> 
            <artifactId>krasa-jaxb-tools</artifactId> 
            <version>1.1</version> 
           </plugin> 
          </plugins> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

編輯:相關依賴我曾嘗試使用:

 <dependency> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>jaxb2-basics-runtime</artifactId> 
      <version>0.9.4</version> 
     </dependency> 

<!--  <dependency> --> 
<!--   <groupId>org.jvnet.jaxb2_commons</groupId> --> 
<!--   <artifactId>jaxb2-basics-annotate</artifactId> --> 
<!--   <version>1.0.0</version> --> 
<!--  </dependency> --> 


<!--  <dependency> --> 
<!--  <groupId>org.jvnet.jaxb2_commons</groupId> --> 
<!--  <artifactId>jaxb2-commons-lang</artifactId> --> 
<!--  <version>2.3</version> --> 
<!--  </dependency> --> 

第一依賴和插件的平等只有結合/哈希碼產量結果。

如果我包含其他2個依賴項,那麼我會爲項目中的每個依賴項丟失工件-id消息。

註解的插件在沒有顯式依賴的情況下工作,沒有equals/hashcode插件時反之亦然。

編輯:萬一有人最終解決方案停留在同一個問題

得到,因此它需要獨立的註釋和等於/哈希代碼的插件爲單獨執行,這解決了所有的問題。

+0

小心解釋爲什麼這是脫離主題?因爲我對maven相當陌生,所以我不知道這兩個插件需要兩次執行才能正常工作,這也是我可以使用google的一個信息。 – John

+0

我剛剛解決了我們的問題 –

+0

您可以添加一個答案,如何分隔兩個插件的執行情況。我也遇到了同樣的問題,我無法將它分成兩個不同的執行 – user2573153

回答

2

找到了解決辦法。這個插件需要另一個依賴項:

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.12.3</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration>        
     <generatePackage>com.argonio.fias.entity</generatePackage>      
     <schemaDirectory>src/main/resources/xsd</schemaDirectory> 
     <readOnly>true</readOnly> 
     <removeOldOutput>true</removeOldOutput> 
     <verbose>true</verbose> 
     <extension>true</extension> 
     <args> 
      <arg>-no-header</arg> 
      <arg>-Xxew</arg> 
      <arg>-Xxew:instantiate lazy</arg> 
      <arg>-Xxew:plural</arg> 
      <arg>-Xequals</arg> 
     </args> 
     <plugins> 
      <plugin> 
       <groupId>com.github.jaxb-xew-plugin</groupId> 
       <artifactId>jaxb-xew-plugin</artifactId> 
       <version>1.5</version> 
      </plugin> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>0.9.4</version> 
      </plugin> 
     </plugins> 
    </configuration> 
    <dependencies> 
     <!-- This dependency is required to execute the plugin --> 
     <dependency> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>jaxb2-basics-tools</artifactId> 
      <version>0.9.4</version> 
     </dependency> 
    </dependencies> 
</plugin> 
0

嘗試添加此依賴關係。順便說一下,你的0.6.3版本似乎很低。

<dependency> 
    <groupId>org.jvnet.jaxb2_commons</groupId> 
    <artifactId>jaxb2-commons-lang</artifactId> 
    <version>2.3</version> 
</dependency> 
+0

我會稍後再嘗試,並讓你知道 – John

+0

嘗試版本0.9.4作爲所有其他jaxb2依賴項。 – JFPicard

+0

我已經嘗試過版本1.0.0和1.0.1,沒有版本0.9.4註釋:http://mvnrepository.com/artifact/org.jvnet.jaxb2_commons/jaxb2-basics-annotate – John

0

@Viacheslav的答案是正確的。但是請注意,您還需要添加一個依賴項目爲:

<dependency> 
    <groupId>org.jvnet.jaxb2_commons</groupId> 
    <artifactId>jaxb2-basics-runtime</artifactId> 
    <version>0.9.4</version> <!-- same as jaxb2-basics plugin version --> 
</dependency>  

所有詳見http://confluence.highsource.org/display/J2B/JAXB2+Basics+Plugins