【问题标题】:How to create two separate jars with wsdl2java?如何使用 wsdl2java 创建两个单独的 jar?
【发布时间】:2012-05-24 16:30:27
【问题描述】:

我对 Maven 很陌生。我正在使用 wsdl2java 来获取 Java 文件,然后创建我需要的 jar 文件。问题是我的 url 来自不同的来源,最终我需要有 4 个不同的 jar 文件。

到目前为止,我尝试创建前两个 jar 文件并稍后处理接下来的两个...所以我在“构建”块中创建了两个不同的“执行”块;每个“执行”块下载每个自己的 wsdl 文件,到目前为止一切顺利。以下插件:

org.codehaus.mojo axistools-maven-plugin

这样工作:它首先编译所有生成的 Java 文件,然后从所有文件中生成 jar 文件,这意味着它只创建一个 jar 文件。

无论如何,我要求 wsdl2java 编译然后在每个“执行”块之后立即创建 jar 文件?我可以得到两个不同的 jar 文件,每个文件只与我在那个“执行”块中下载的 wsdl 文件有关?

以下是 pom.xml。此时生成的jar文件由以下文件生成的Java文件组成:file1、file2、file3、file4和file5。

我想要一个 jar 来自:file1、file2 和 file3,另一个来自:file4 和 file5。

任何帮助将不胜感激。

<build>
<plugins>    
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>axistools-maven-plugin</artifactId>
    <version>1.4</version>        
    <dependencies>          
      <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.1</version>
      </dependency>
      <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1</version>
      </dependency>
    </dependencies>
    <executions>
      <execution>
      <id>prod</id>          
        <goals>
          <goal>wsdl2java</goal>
        </goals>
        <configuration>    

      <urls>
        <url>https://file1.svc?wsdl</url>
        <url>https://file2.svc?wsdl</url>
        <url>https://file3.svc?wsdl</url>                        
      </urls>

      <allElements>true</allElements>
      <wrapArrays>false</wrapArrays>
      <testCases>false</testCases>
      <serverSide>false</serverSide>
      <typeMappingVersion>1.2</typeMappingVersion>                      
    </configuration>
      </execution>

      <execution>
      <id>sandbox</id>
        <goals>
          <goal>wsdl2java</goal>
        </goals>
        <configuration>
        <sourceDirectory>${basedir}/wsdl</sourceDirectory>

    <useEmitter>true</useEmitter>        
<wsdlFiles>
    <wsdlFile>file4.wsdl</wsdlFile>
    <wsdlFile>file5.wsdl</wsdlFile>
</wsdlFiles>    

      <allElements>true</allElements>
      <wrapArrays>false</wrapArrays>
      <testCases>false</testCases>
      <serverSide>false</serverSide>
      <typeMappingVersion>1.2</typeMappingVersion>                             
    </configuration>
      </execution>          
    </executions>
</plugin>
</plugins>
</build>

由于评论太长,我不得不编辑我的原始帖子......

感谢您的回复。我确实尝试了您的解决方案。如您所知,“axistools-maven-plugin”内置了“maven-compiler-plugin”和“maven-jar-plugin”。它首先从指定的 url 下载所有 wsdl 文件。它创建不同的输出目录;但是,在编译阶段,它会尝试一次编译所有输出目录中的所有 Java 文件;因为有一些常见的 Java 文件。这些 wsdl 文件,它会在编译时给出“重复类”错误。

我们可以定义自己的自定义“maven-compiler-plugin”和“maven-jar-plugin”块并添加“include”或“exclude”块让maven知道要编译哪些文件以及如何创建jar文件,但由于“axistools-maven-plugin”首先运行自己的“maven-compiler-plugin”,它首先尝试编译所有 Java 文件,但仍然给出“重复类”错误之前它看起来在我们的“maven-compiler-plugin”和“maven-jar-plugin”块中。

【问题讨论】:

    标签: maven jar pom.xml wsdl2java


    【解决方案1】:

    一个想法:为每个axistools插件执行定义&lt;outputDirectory&gt;,例如“classesProd”和“classesSandbox”。

    然后使用maven-jar-plugin 的多次执行从这些文件构建jar。每个 jar 插件执行都会指定一个 &lt;classesDirectory&gt;,对应于 axistools 执行的 &lt;outputDirectory&gt;。您可能希望为 jar 执行定义 &lt;classifier&gt; 或更改 &lt;outputDirectory&gt;,这样第二个 jar 就不会覆盖第一个。

    【讨论】:

    • 另一条评论...在我可以为 maven-jar-plugin 设置不同的“执行”块之前,我需要让 wsdl2java 知道在哪里编译类;这意味着我必须为 maven-compiler-plugin 设置不同的“执行”块。但问题是我不知道如何为除了默认目标/类和目标/测试类之外的编译类定义目录?请记住,我需要创建 4 个不同的 jar,因此我需要为 maven-compiler-plugin 设置四个“执行”块,为 maven-jar-plugin 设置四个“执行”块。但是如何拥有类的自定义目标目录呢?
    • 我想知道这作为多模块构建中的 4 个独立项目是否会更好。
    【解决方案2】:

    通过将 nsExcludes 添加到 wsdl2java 的配置部分,我能够绕过创建重复的 java 类。

    <goals>
    <goal>wsdl2java</goal>
    </goals>
    <configuration>
    <nsExcludes>
      <nsExclude>http://lang.java</nsExclude>
      <nsExclude>http://rmi.java</nsExclude>
    </nsExcludes>
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多