2012-05-24 83 views
1

我对maven很陌生。我使用wsdl2java来获取Java文件,然后创建我需要的jar文件。问题是我的网址来自不同的来源,最终我需要4个不同的jar文件。如何用wsdl2java创建两个独立的jar包?

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

org.codehaus.mojo axistools - Maven的插件

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

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

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

我想从一个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“块。

回答

0

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

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

+0

另一条评论...在我可以为maven-jar-plugin创建不同的“执行”块之前,我需要让wsdl2java知道在哪里编译类;这意味着我必须为maven-compiler-plugin提供不同的“执行”块。但问题是,我不知道如何定义编译类的目录,除了默认的目标/类和目标/测试类?请记住,我需要创建4个不同的jar,所以我需要为maven-compiler-plugin提供四个“执行”块,为maven-jar-plugin提供四个“执行”块。但那么如何拥有类的自定义目标目录? – blueSky

+0

我想知道这是否会更好地作为多模块构建4个独立的项目。 – user944849

0

我能够通过将nsExcludes添加到wsdl2java的配置部分来解决创建重复的java类的问题。

<goals> 
<goal>wsdl2java</goal> 
</goals> 
<configuration> 
<nsExcludes> 
    <nsExclude>http://lang.java</nsExclude> 
    <nsExclude>http://rmi.java</nsExclude> 
</nsExcludes> 
... 
相关问题