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

时间:2010-10-18 11:00:57

标签: maven-2 jax-ws wsimport

我必须使用wsimport生成源代码,我认为它应该转到/ target / generated-sources / wsimport而不是/ src / main / java。

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

2 个答案:

答案 0 :(得分:4)

尝试使用build helper pluginadd source目标:

<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>  

答案 1 :(得分:2)

  

我必须使用wsimport生成源代码,我认为它应该转到/ target / generated-sources / wsimport而不是/ src / main / java。

这是一个正确的假设。

  

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

我从未注意到这个问题(并将其视为一个bug,一个插件必须处理这些事情)。

奇怪的是,WsImportMojo似乎通过调用File#mkdirs()来做必要的事情:

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;
        }
        ...
     }
     ...
}

你能说明你如何调用插件及其配置吗?