2012-10-31 5 views
6

내 작품에서 코드 생성을 위해 jaxws-maven-plugin을 사용했습니다. 나는이 개 프로젝트는 ''일반 '과'클라이언트입니다 있습니다. "구조는 대략 다음과 같이다른 디렉토리에있는 XSD와 WSDL

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

가 어떻게 프로젝트에 WSDL에서 클래스를 생성 할 수 있습니다" ""프로젝트에서 XSD를 사용하여, "클라이언트 일반 ?

의 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> 
당신이 자원 src/main/resources/ 디렉토리를 사용 받는다는 규칙에 충실해야 모든

답변

6

먼저

따고 다음에 액세스 할 수 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 plugin이 사용하는 기본 위치는 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를 어디에서 찾을 수 있는지 어떻게 알 수 있습니까? –