繁体   English   中英

在生成代码时,如何告诉maven / wsimport忽略某些架构文件?

[英]How can I tell maven/wsimport to ignore certain schema files when generating code?

我有几个需要集成的Web服务,可以通过使用Maven的wsimport插件构建Web服务客户端来实现。 有问题的Web服务都引用企业通用的模式文件,因此生成单独的客户端会产生重复的代码,其中每个Web服务客户端jar都包含相同模式的实现。

我想减少这些冗余代码,所以我的第一个想法是使用从通用模式生成的通用代码构建一个独立的jar。 这里的问题是,当我使用maven从WSDL生成Web服务客户端时,它仍将为WSDL引用的所有模式生成代码-我如何告诉maven 不要为通用模式文件生成代码,因为该代码已经在引用的库中?

我确实尝试过:

<resources>
    <resource>
        <directory>${basedir}/wsdl</directory>
        <excludes>
            <exclude>**/my_schema.xsd</exclude>
        </excludes>
    </resource>
</resources>

但是wsimport仍然为my_schema.xsd生成代码,即使我为已经包含以下代码的jar创建了依赖项:

<dependencies>
    <dependency>
        <artifactId>MyCommonCode</artifactId>
        <groupId>com.myCompany</groupId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

我正在尝试的解决方案使用情节 在通用模式的POM文件中,我有类似以下内容:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
<executions>
    <execution>
        <goals>
            <goal>xjc</goal>
         </goals>
         <configuration>
           <bindingDirectory>${basedir}/src/bindings</bindingDirectory>
               <!-- The schema directory or xsd files. --> 
               <schemaDirectory>${basedir}/src/schema</schemaDirectory>
               <!-- The working directory to create the generated java source files. -->
               <outputDirectory>${build.directory}/generated-sources/jaxb</outputDirectory>
               <arguments>-episode "${build.directory}/generated-sources/myCommonSchema.episode"</arguments>
         </configuration>
     </execution>
 </executions>
</plugin>

此处的关键是<arguments>-episode "${build.directory}/generated-sources/myCommonSchema.episode"</arguments> -这将生成情节文件(在指定目录中名为“ myCommonSchema.episode”)。 下一步是将情节文件复制到依赖于通用模式的Web服务,并将其作为绑定文件引用,如下所示:

<plugin>
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <id>MyService</id>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>

                <bindingDirectory>${basedir}/src/</bindingDirectory>
                <bindingFiles>
                    <bindingFile>myCommonSchema.episode</bindingFile>
                </bindingFiles>
                <wsdlDirectory>${basedir}/src/wsdl/MyWebService</wsdlDirectory>
                <wsdlFiles>
                    <wsdlFile>MyWebService.wsdl</wsdlFile>
                </wsdlFiles>
                <wsdlLocation>META-INF/wsdl/MyWebService/MyWebService.wsdl</wsdlLocation>
                <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
                <verbose>true</verbose>
                <xdebug>true</xdebug>
                <extension>true</extension>
                <xjcArgs>
                    <xjcArg>-Xannotate</xjcArg>
                </xjcArgs>
            </configuration>
        </execution>

我仍在对此进行测试,但似乎可行。 唯一不方便的部分是将情节文件移至其他客户端,但是可能有一种自动执行此操作的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM