如何使用wsdl2java创建两个单独的jar?

时间:2012-05-24 16:30:28

标签: maven jar pom.xml wsdl2java

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

到目前为止,我尝试创建前两个jar文件,然后处理接下来的两个...所以我创建了两个不同的"执行" " build"块;每个"执行"块下载每个自己的wsdl文件,到目前为止一直很好。以下插件:

org.codehaus.mojo axistools-行家-插件

以这种方式工作:它首先编译所有生成的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>

由于评论时间过长,我不得不编辑我原来的帖子......

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

我们可以定义自己的自定义&#34; maven-compiler-plugin&#34;和&#34; maven-jar-plugin&#34;阻止并添加&#34; include&#34;或&#34;排除&#34;让maven知道要编译哪些文件以及如何创建jar文件的块,但是因为&#34; axistools-maven-plugin&#34;运行自己的&#34; maven-compiler-plugin&#34;首先,它尝试首先编译所有Java文件,然后仍然提供&#34;重复的类&#34;错误之前它会查看我们的&#34; maven-compiler-plugin&#34;和&#34; maven-jar-plugin&#34;块。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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