Maven 2 如何在Maven中为生成的源创建文件夹?

Maven 2 如何在Maven中为生成的源创建文件夹?,maven-2,jax-ws,wsimport,Maven 2,Jax Ws,Wsimport,我必须使用wsimport生成源代码,我假设应该转到/target/generated sources/wsimport,而不是/src/main/java 问题是wsimport需要在执行之前创建目标文件夹,但它失败了。我可以先使用任何maven插件创建该目录吗。我可以使用ant来完成,但我更喜欢将其保存在POM中。尝试使用以下目标的添加源代码: org.codehaus.mojo 构建助手maven插件 添加源 生成源 添加源 ${basedir}/target/generated/src

我必须使用wsimport生成源代码,我假设应该转到/target/generated sources/wsimport,而不是/src/main/java


问题是wsimport需要在执行之前创建目标文件夹,但它失败了。我可以先使用任何maven插件创建该目录吗。我可以使用ant来完成,但我更喜欢将其保存在POM中。

尝试使用以下目标的
添加源代码:


org.codehaus.mojo
构建助手maven插件
添加源
生成源
添加源
${basedir}/target/generated/src/wsimport
我必须使用wsimport生成源代码,我假设应该转到/target/generated sources/wsimport,而不是/src/main/java

这是一个正确的假设

问题是wsimport需要在执行之前创建目标文件夹,但它失败了。我可以先使用任何maven插件创建该目录吗。我可以用ant来做,但我更喜欢把它保存在POM中

我从来没有注意到这个问题(并且会把它看作是一个bug,一个插件必须处理这些事情)。p> 奇怪的是,这似乎是通过调用:

public void execute()
抛出MojoExecutionException异常
{
//需要构建URLClassloader,因为Maven将其从链中移除
ClassLoader父级=this.getClass().getClassLoader();
String originalSystemClasspath=this.initClassLoader(父级);
尝试
{
sourceDestDir.mkdirs();
getDestDir().mkdirs();
文件[]wsdls=getWSDLFiles();
if(wsdls.length==0&(wsdlUrls==null | | wsdlUrls.size()==0)){
getLog().info(“未找到要处理的WSDL,请至少指定以下参数之一:wsdlFiles、wsdlDirectory或WSDLURL”);
返回;
}
...
}
...
}

您能展示一下如何调用插件及其配置吗?

这并没有回答问题(也不是必需的),但对那些有类似问题的人很有帮助。我使用exec maven插件执行wsimport,这就是问题所在。我切换到jaxws maven插件,现在它对我来说运行良好。可能除了在生成源代码阶段处理每个WSDL后编译源代码之外。我无法将-Xnocompile参数传递给wsimport,但它仍然可以工作。@Lorean不确定,但1。您应该能够使用
args
optional参数2声明可选的wsimport命令行选项。该插件似乎在默认情况下通过了-Xnocompile。
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>add-source</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>add-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>${basedir}/target/generated/src/wsimport</source>
        </sources>
      </configuration>
    </execution>
  </executions>
</plugin>  
public void execute()
    throws MojoExecutionException
{

    // Need to build a URLClassloader since Maven removed it form the chain
    ClassLoader parent = this.getClass().getClassLoader();
    String originalSystemClasspath = this.initClassLoader( parent );

    try
    {

        sourceDestDir.mkdirs();
        getDestDir().mkdirs();
        File[] wsdls = getWSDLFiles();
        if(wsdls.length == 0 && (wsdlUrls == null || wsdlUrls.size() ==0)){
            getLog().info( "No WSDLs are found to process, Specify atleast one of the following parameters: wsdlFiles, wsdlDirectory or wsdlUrls.");
            return;
        }
        ...
     }
     ...
}