8

私の仕事では、コード生成にjaxws-maven-pluginを使用しました。「共通」と「クライアント」の2つのプロジェクトがあります。大まかに次のように構成します。

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

プロジェクト「common」のxsdを使用して、プロジェクト「client」のwsdlからクラスを生成するにはどうすればよいですか?

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

1 に答える 1

6

まず、Mavenの規則に従い、src/main/resources/リソースにディレクトリを使用する必要があります。

その後、を使用してjarファイルをmaven-dependency-plugin:unpack-dependencies解凍し、 :にアクセスできます。commonsome.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-pluginwsimport

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


*.xsdこれは、別のプロジェクトにファイルがある場合に行うべき方法です。相対パスで他のプロジェクトにアクセスしないでください。各プロジェクトは、依存関係メカニズムを使用して他のリソースにのみアクセスする必要があります。

于 2012-10-31T10:23:19.210 に答える