1

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

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

org.codehaus.mojo axistools-maven-plugin

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

无论如何,我要求 wsdl2java 编译然后在每个“执行”块之后立即创建 jar 文件?我可以获得两个不同的 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”之前仍然给出“duplicate class”错误,并且“maven-jar-plugin”块。

4

2 回答 2

0

一个想法:<outputDirectory>为您的每个axistools 插件执行定义,例如“classesProd”和“classesSandbox”。

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

于 2012-05-25T01:03:46.010 回答
0

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

<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<nsExcludes>
  <nsExclude>http://lang.java</nsExclude>
  <nsExclude>http://rmi.java</nsExclude>
</nsExcludes>
...
于 2013-12-04T16:28:48.330 回答