2012-10-31 8 views
6

Nel mio lavoro ho usato jaxws-maven-plugin per la generazione del codice. Ho due progetti sono "comuni" e '' cliente". Struttura o meno come segue:XSD e WSDL in diverse directory

app/ 
  common/ 
   resource/ 
    some.xsd 
  client/ 
   resource/ 
    some.wsdl 

Come posso generare classi da WSDL nel progetto 'cliente', utilizzando il XSD dal progetto 'comune' ?

pom.xml:.

  <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxws-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>wsimport</goal> 
        </goals> 
        <configuration> 
         <verbose>true</verbose> 
         <bindingFiles> 
          <bindingFile>${project.parent.basedir}/common/resource/some.xsd</bindingFile> 
         </bindingFiles> 
         <wsdlFiles> 
          <wsdlFile>/resource/some.wsdl</wsdlFile> 
         </wsdlFiles> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

risposta

6

Prima di tutto si dovrebbe attenersi alle convenzioni Maven, utilizzare src/main/resources/ directory per le risorse

a opo fare questo, allora è possibile utilizzare il maven-dependency-plugin:unpack-dependencies per decomprimere il file common jar per accedere al some.xsd:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>com.stackoverflow.Q13155047</groupId> 
     <artifactId>app</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>client</artifactId> 

    <name>${project.artifactId}-${project.version}</name> 

    <properties> 
     <schema.location>${project.build.directory}/schemas</schema.location> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>com.stackoverflow.Q13155047</groupId> 
      <artifactId>common</artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.5.1</version> 
       <executions> 
        <execution> 
         <id>unpack-dependencies</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>unpack-dependencies</goal> 
         </goals> 
         <configuration> 
          <includes>**/*.xsd</includes> 
          <outputDirectory>${schema.location}</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxws-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>wsimport</goal> 
         </goals> 
         <configuration> 
          <verbose>true</verbose> 
          <bindingDirectory>${schema.location}</bindingDirectory> 
          <bindingFiles> 
           <bindingFile>some.xsd</bindingFile> 
          </bindingFiles> 
          <wsdlDirectory>src/main/resources</wsdlDirectory> 
          <wsdlFiles> 
           <wsdlFile>some.wsdl</wsdlFile> 
          </wsdlFiles> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Il jaxws-maven-plugin è legato al generate-sources fase di modo da aggiungere la maven-dependency-plugin prima della jaxws-maven-plugin e alle stesse marche di fase sicuro che toglie tutto prima di applicare l'obiettivo wsimport.

Assicurarsi che <bindingDirectory/> e <wsdlDirectory/> siano corretti.


Questo è come si dovrebbe fare se si hanno i file *.xsd in un altro progetto. Mai accedere ad altri progetti con percorsi relativi. Ogni progetto dovrebbe accedere ad altre risorse solo utilizzando il meccanismo delle dipendenze.

+0

Grazie! Sto solo cercando di superare tutti i percorsi relativi. –

+2

Come per questo collegamento, il percorso predefinito utilizzato da maven wsimport plugin è src/wsdl. Suppongo che .wsdl non debba essere conservato in src/main/resources. https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html – RuntimeException

+1

Come si fa riferimento agli XSD nel WSDL quando si esegue il decompressione nella directory $ {schema.location}? Come fa il WSDL a sapere dove trovare gli XSD? –