Maven 如何使用wsdl2java创建两个独立的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 任何帮助都将不胜感激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文件,
<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个独立的项目,这是否会更好。