2014-09-24 77 views
2

我有一個jaxb插件的大問題。我有一個項目A,其中我有src/main/resources/xsd/common.xsd文件。在這個項目中,我使用cxf-xjc-插件 來生成java類。我也有我的節目文件在src/main/resources/META-INF下,名爲sun-jaxb.episodejaxb,xsd import not recognized

接下來,我有項目B,它對項目A有Maven依賴關係。在這個項目中,我有src/main/resources /catalog.txt

PUBLIC "http://www.some_path" "maven:GROUP_ID_OF_PROJECT_A:ARTIFACT_ID_OF_PROJECT_A:jar::!/common.xsd" 

在BI項目與JAXB插件

<plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <configuration> 
       <extension>true</extension> 
       <episodes> 
        <episode> 
         <groupId>GROUP_ID_OF_PROJECT_A</groupId> 
         <artifactId>ARTIFACT_ID_OF_PROJECT_A</artifactId> 
        </episode> 
       </episodes> 
       <catalogs> 
        <catalog>src/main/resources/catalog.txt</catalog> 
       </catalogs> 
      </configuration> 
</plugin> 

下一頁POM文件,我有B工程

src/main/resources/other/xsd my main.xsd 

文件,其中我使用類型定義從common.xsd

我的xmlns:CMNS = 「HTTP://www.some_path」 //這是相同catalog.txt 和

<xs:import namespace="http://www.some_path"/> 

但問題是,我得到錯誤未定義簡單或複雜的類型,因爲它不承認CMNS

回答

3

我使用這個插件來解決XSD的公共進口

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.1</version> 
    <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <args> 
      <arg>-Xannotate</arg> 
      <arg>-Xnamespace-prefix</arg> 
      <arg>-nv</arg> 
     </args> 
     <extension>true</extension> 
     <forceRegenerate>true</forceRegenerate> 
     <bindingDirectory>${basedir}/src/main/resources/xjb</bindingDirectory> 
     <bindingIncludes> 
      <include>*.xjb</include> 
     </bindingIncludes> 
     <schemas> 
      <schema> 
       <fileset> 
        <directory>${basedir}/src/main/resources/xsd</directory> 
        <includes> 
         <include>*.xsd</include> 
        </includes> 
       </fileset> 
      </schema> 
      <schema> 
       <dependencyResource> 
        <groupId>groupID</groupId> 
        <artifactId>artifactID</artifactId> 
        <resource>target.xsd</resource> 
       </dependencyResource> 
      </schema> 

     </schemas> 
     <episodes> 
      <episode> 
       <groupId>groupID</groupId> 
       <artifactId>artifactID</artifactId> 
      </episode> 
     </episodes> 
     <debug>true</debug> 
     <verbose>true</verbose> 
     <plugins> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>0.6.2</version> 
      </plugin> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics-annotate</artifactId> 
       <version>0.6.2</version> 
      </plugin> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-namespace-prefix</artifactId> 
       <version>1.1</version> 
      </plugin> 
     </plugins> 
    </configuration> 
</plugin> 

插件項目的pom.xml的一個

<plugin> 
     <groupId>org.jvnet.jaxb2.maven2</groupId> 
     <artifactId>maven-jaxb2-plugin</artifactId> 
     <version>0.8.1</version> 
     <executions> 
      <execution> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>generate</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <args> 
       <arg>-Xannotate</arg> 
       <arg>-nv</arg> 
       <arg>-Xnamespace-prefix</arg> 
      </args> 
      <extension>true</extension> 
      <schemas> 
       <schema> 
        <fileset> 
         <directory>${basedir}/src/main/resources/xsd/</directory> 
         <includes> 
          <include>A.xsd</include> 
         </includes> 
        </fileset> 
       </schema> 
      </schemas> 
      <bindingDirectory>src/main/resources/xjb</bindingDirectory> 
      <bindingIncludes> 
       <include>*.xjb</include> 
      </bindingIncludes> 
      <debug>true</debug> 
      <verbose>true</verbose> 
      <forceRegenerate>true</forceRegenerate> 
      <plugins> 
       <plugin> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics</artifactId> 
        <version>0.6.0</version> 
       </plugin> 
       <plugin> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics-annotate</artifactId> 
        <version>0.6.0</version> 
       </plugin> 
       <plugin> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-namespace-prefix</artifactId> 
        <version>1.1</version> 
       </plugin> 
      </plugins> 
     </configuration> 
    </plugin> 

插件項目B的pom.xml中

<plugin> 
     <groupId>org.jvnet.jaxb2.maven2</groupId> 
     <artifactId>maven-jaxb2-plugin</artifactId> 
     <version>0.8.1</version> 
     <executions> 
      <execution> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>generate</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <args> 
       <arg>-Xannotate</arg> 
       <arg>-Xnamespace-prefix</arg> 
       <arg>-nv</arg> 
      </args> 
      <extension>true</extension> 
      <forceRegenerate>true</forceRegenerate> 
      <bindingDirectory>${basedir}/src/main/resources/xjb</bindingDirectory> 
      <bindingIncludes> 
       <include>*.xjb</include> 
      </bindingIncludes> 
      <schemas> 
       <schema> 
        <fileset> 
         <directory>${basedir}/src/main/resources/xsd/</directory> 
         <includes> 
          <include>B.xsd</include> 
         </includes> 
        </fileset> 
       </schema> 
       <schema> 
        <dependencyResource> 
         <groupId>AgroupID</groupId> 
         <artifactId>AartifactID</artifactId> 
         <resource>xsd/A.xsd</resource> 
        </dependencyResource> 
       </schema> 
      </schemas> 
      <episodes> 
       <episode> 
        <groupId>AgroupID</groupId> 
        <artifactId>AartifactID</artifactId> 
       </episode> 
      </episodes> 
      <debug>true</debug> 
      <verbose>true</verbose> 
      <plugins> 
       <plugin> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics</artifactId> 
        <version>0.6.2</version> 
       </plugin> 
       <plugin> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics-annotate</artifactId> 
        <version>0.6.2</version> 
       </plugin> 
       <plugin> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-namespace-prefix</artifactId> 
        <version>1.1</version> 
       </plugin> 
      </plugins> 
     </configuration> 
    </plugin> 

必須執行MVN項目之前安裝項目A的B


添加這個插件添加到源目標生成的類

  <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <version>1.1</version> 
       <executions> 
        <execution> 
         <id>add-source</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>add-source</goal> 
         </goals> 
         <configuration> 
          <sources> 
           <source>target/generated-sources/xjc</source> 
          </sources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

記住要執行的Maven - 更新項目

+1

+1使用官方JAXB插件。 https://jaxb.java.net/ https://java.net/projects/maven-jaxb2-plugin/pages/Home – Puce 2014-09-24 08:04:10

+0

它不起作用 – Unyx 2014-09-24 08:16:19

+0

奇怪的是,我在一個基於這個插件的建築羣中工作。看到這個[鏈接](http://confluence.highsource.org/display/MJIIP/User+Guide#UserGuide-Separateschemacompilation)分開編譯和[this](http://confluence.highsource.org/display/MJIIP/用戶+指南#UserGuide-Resourceentries)引用資源。 – Xstian 2014-09-24 08:24:29