Как создать папку для сгенерированных источников в Maven? - PullRequest
5 голосов
/ 18 октября 2010

Мне нужно сгенерировать исходники, используя wsimport, и я предполагаю, что он должен идти в / target / generate-sources / wsimport, а не в /src/main/java.

Проблема в том, что для wsimport требуется создание целевой папкидо исполнения, и это не удается.Могу ли я сначала создать этот каталог, используя любой плагин maven.Я могу сделать это с помощью муравья, но я предпочитаю держать его в POM.

Ответы [ 2 ]

4 голосов
/ 18 октября 2010

Попробуйте использовать add 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>  
2 голосов
/ 18 октября 2010

Я должен сгенерировать источники, используя wsimport, и я предполагаю, что он должен идти в / target / generate-sources / wsimport, а не /src/main/java.

Это правильное предположение.

Проблема в том, что wsimport требуется целевая папка, созданная перед выполнением, и она не работает. Могу ли я сначала создать этот каталог, используя любой плагин maven. Я могу сделать это с помощью муравья, но я предпочитаю держать его в POM.

Я никогда не замечал этой проблемы (и расценил бы это как ошибку, плагин должен заботиться о таких вещах).

Странная часть в том, что 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
    {

        <b>sourceDestDir.mkdirs();
        getDestDir().mkdirs();</b>
        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;
        }
        ...
     }
     ...
}

Не могли бы вы показать, как вы вызываете плагин и его конфигурацию?

...