2012-10-31 5 views
6

私の仕事では、コード生成のためにjaxws-maven-pluginを使用しました。 私は「おおまかに以下の構造:異なるディレクトリのXSDとWSDL

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

は、どのように私は、プロジェクト内のWSDLからクラスを生成することができます。 『二つのプロジェクトは、「一般的」であり、「」クライアントの持っている『共通』プロジェクトからXSDを使用して、』クライアントを?

のpom.xml:あなたがリソースをsrc/main/resources/ディレクトリを使用し、Mavenの規則に固執する必要があり、すべての

  <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> 

答えて

6

まず

A。 FTERその後、あなたがアクセスすることをcommon jarファイルを解凍するためにmaven-dependency-plugin:unpack-dependenciesを使用できることをやって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> 

jaxws-maven-pluginがそのように追加generate-sources相に結合されmaven-dependency-pluginjaxws-maven-plugin前と同じ位相になるまでwsimportの目標を適用する前にすべてを解凍してください。

<bindingDirectory/><wsdlDirectory/>が正しいことを確認してください。


これは、別のプロジェクトに*.xsdファイルがある場合に行う必要があります。 は相対パスの他のプロジェクトにアクセスしません。各プロジェクトは、依存性メカニズムを使用して他のリソースにのみアクセスする必要があります。

+0

ありがとうございました!私はちょうどすべての相対的な道を通過しようとしています。 –

+2

このリンクに従って、maven wsimportプラグインが使用するデフォルトの場所はsrc/wsdlです。私は、.wsdlはsrc/main/resourcesに保存すべきではないと推測しています。 https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html – RuntimeException

+1

$ {schema.location}ディレクトリに展開するときにWSDLのXSDをどのように参照しますか? WSDLはXSDの場所をどのように知っていますか? –

関連する問題