Почему сгенерированные источники Maven не собираются?
У меня есть плагин, который генерирует источники в каталоге target/generated-sources/wrappers
. Он подключен к фазе генерируемых источников следующим образом:
<plugin>
<groupId>mygroupid</groupId>
<artifactId>myartifactid</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xml2java</goal>
</goals>
</execution>
</executions>
</plugin>
Проблема в том, что когда я использую mvn deploy
, файлы .class
не будут помещены в банку. Я вижу все файлы .java
, но не .class
.
Я прочитал все проблемы вокруг этой проблемы, но не мог понять, как решить проблему. Я использую Maven 3.0.x.
Ответы
Ответ 1
Плагин build-helper действительно решил проблему. Спасибо @Joe за комментарий.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/wrappers</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Ответ 2
Если вы написали плагин самостоятельно, вы можете программно добавить путь со сгенерированными исходниками к исходным путям maven.
@Mojo(name = "generate")
public class MyCodegenMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}")
private MavenProject project;
@Override
public void execute() throws MojoExecutionException, MojoFailureException{
// your generator code
project.addCompileSourceRoot("path/to/your/generated/sources");
}
}
Например, плагин raml-jaxrs-codegen использует эту технику. Смотрите RamlJaxrsCodegenMojo.java для более подробной информации.