Maven 如何使用wsdl2java创建两个独立的JAR?

Maven 如何使用wsdl2java创建两个独立的JAR?,maven,jar,pom.xml,wsdl2java,Maven,Jar,Pom.xml,Wsdl2java,我对maven很陌生。我正在使用wsdl2java获取Java文件,然后创建我需要的jar文件。问题是我的URL来自不同的来源,最终我需要有4个不同的jar文件 到目前为止,我试图创建前两个jar文件,然后再处理下两个。。。因此,我在“构建”块中创建了两个不同的“执行”块;每个“执行”块下载每个自己的wsdl文件,到目前为止还不错。以下插件: org.codehaus.mojo AxisToolsMaven插件 工作原理是这样的:它首先编译所有生成的Java文件,然后从所有文件中生成jar文件,

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

到目前为止,我试图创建前两个jar文件,然后再处理下两个。。。因此,我在“构建”块中创建了两个不同的“执行”块;每个“执行”块下载每个自己的wsdl文件,到目前为止还不错。以下插件:

org.codehaus.mojo AxisToolsMaven插件

工作原理是这样的:它首先编译所有生成的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>

org.codehaus.mojo
AxisToolsMaven插件
1.4
javax.mail
邮件
1.4.1
javax.activation
激活
1.1
戳
wsdl2java
https://file1.svc?wsdl
https://file2.svc?wsdl
https://file3.svc?wsdl                        
真的
假的
假的
假的
1.2
沙箱
wsdl2java
${basedir}/wsdl
真的
文件4.wsdl
文件5.wsdl
真的
假的
假的
假的
1.2
由于评论时间太长,我不得不编辑我原来的帖子

谢谢你的回复。我确实试过你的解决办法。正如您所知,“axistools maven插件”内置了“maven编译器插件”和“maven jar插件”。它首先从指定的URL下载所有wsdl文件。它创建不同的输出目录;然而,在编译阶段,它试图一次编译所有输出目录中的所有Java文件;因为有一些Java文件是常见的。对于这些wsdl文件,它在编译时给出了“复制类”错误

我们可以定义自己的自定义“maven编译器插件”和“maven jar插件”块,并添加“include”或“exclude”块,让maven知道要编译哪些文件以及如何创建jar文件,但由于“axistools maven插件”首先运行自己的“maven编译器插件”,因此它会尝试先编译所有Java文件,然后仍然会给出“duplicate class”错误之前,它查看我们的“maven编译器插件”和“maven jar插件”块。

一个想法:为每个axistools插件执行定义
,例如“classesProd”和“classesSandbox”


然后使用多次执行
maven jar插件
从这些文件构建jar。每次jar插件执行都会指定一个与axistools执行的
相对应的
。您可能希望为jar执行定义
或更改
,这样第二个jar就不会超过第一个。

我可以通过向wsdl2java的配置部分添加nsExcludes来绕过重复java类的创建

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

wsdl2java
http://lang.java
http://rmi.java
...

另一条评论……在我可以为maven jar插件设置不同的“执行”块之前,我需要让wsdl2java知道在哪里编译类;这意味着我必须有不同的“执行”maven编译器插件的块。但问题是,除了默认的目标/类和目标/测试类之外,我不知道如何为编译类定义dir?记住,我需要创建4个不同的jar,所以我需要为maven编译器插件创建4个“执行”块,为maven jar插件创建4个“执行”块。但是,如何为类定制目标目录呢?我想知道,如果在多模块构建中有4个独立的项目,这是否会更好。