you than running rather provided pom plugin perhaps jre jdk compiler artifactid are java maven lombok

than - ¿Cómo ignorar el directorio de Java Source durante la compilación de Maven?



no compiler is provided in this environment. perhaps you are running on a jre rather than a jdk? (4)

Estoy intentando utilizar el Plugin de Lombok Maven para garantizar la creación correcta de Javadocs cuando utilizo Lombok .

Lombok Maven presenta un nuevo objetivo de generación de código, justo antes de la compilación. En mi configuración, mi sourceDirectory (Java con anotaciones de Lombok, src/main/java ) se procesa para crear Java (sin anotaciones Lombok) en target/generated-sources/delombok .

Sin embargo, cada archivo en sourceDirectory ahora tiene un archivo correspondiente (idénticamente llamado) en target/generated-sources/delombok , lo que resulta en fallas de compilación debido a clases duplicadas.

¿Cómo puedo decirle al compilador de Java que ignore las fuentes en sourceDirectory ?

Tenga en cuenta que la configuración predeterminada de Lombok Maven hará que el desarrollador ponga Java (con anotaciones Lombok) en la carpeta src/main/lombok lugar de src/main/java . Sin embargo, no deseo hacer esto porque confunde los IDEs y mi código compila muy bien (si elimino el plugin Maven).

Tenga en cuenta también que la simple redefinición de sourceDirectory también afectará a los IDE (ya no saben dónde encontrar el código fuente de Java).


Recientemente cambié de usar el enfoque de flakey maven-exec-plugin para generar fuentes sin formato para la herramienta javadoc para usar el complemento lombok-maven-plugin

Mi configuración

  • Todas las fuentes en src/main/java
  • Las fuentes generadas van en target/generated-sources/delombok

Inicialmente me encontré con este problema, pero parece ser una solución fácil: no dejes que lombok-maven-plugin agregue la ruta delombok a las rutas fuente del compilador con addOutputDirectoy . ES DECIR

<plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>0.11.2.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>delombok</goal> </goals> </execution> </executions> <configuration> <addOutputDirectory>false</addOutputDirectory> <sourceDirectory>src/main/java</sourceDirectory> </configuration> </plugin>

Esto parece resolver el problema por ahora

EDITAR: Bonificación, cómo generar javadocs adecuados con esta configuración

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.8.1</version> <configuration> <defaultVersion>${project.version}</defaultVersion> <sourcepath>target/generated-sources/delombok</sourcepath> </configuration> </plugin>


El objetivo delombok está diseñado para transformar el código java de src/main/lombok a target/generated-source/delombok . Luego, el otro código Java que se encuentra en src/main/java se combina con target/generated-source/delombok para producir las clases java combinadas.

Ayuda a pensar en delombok como un generador de código fuente.

Entonces, ¿cómo puedes obtener lo que realmente quieres? (Tenga en cuenta que Maven tiene un método addCompileSourceRoot , pero no un removeCompileSourceRoot correspondiente). Imagine el siguiente hack :

  1. Anule el <build><sourceDirectory> de src/main/java para que sea ${project.build.directory}/generated-sources/delombok .
  2. Reemplace el directorio sourceDirectory delombok predeterminado de src/main/lombok para que sea src/main/java , y deshabilite addOutputDirectory .

Básicamente, target/generated-sources/delombok src/main/java , pero Maven lo ignorará y utilizará target/generated-sources/delombok . El plugin de Lombok transformará src/main/java en código elaborado en target/generated-sources/delombok .

<build> <sourceDirectory>${project.build.directory}/generated-sources/delombok</sourceDirectory> <plugins> <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.16.6.1</version> <executions> <execution> <id>delombok</id> <phase>generate-sources</phase> <goals> <goal>delombok</goal> </goals> <configuration> <addOutputDirectory>false</addOutputDirectory> <sourceDirectory>src/main/java</sourceDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>

Tenga en cuenta que no debería tener que hackear otros complementos, como maven-jar-plugin o maven-javadoc-plugin , ya que deberían respetar el sourceDirectory .

Use este truco bajo su propio riesgo. (Creo que esto puede confundir a tu IDE y a otros desarrolladores).


Cree un nuevo perfil de Maven , y en el nuevo perfil, simplemente redefina las fuentes:

<sourceDirectory>target/generated-sources/delombok</sourceDirectory>

Alternativamente

  1. Build helper: hay un helper de compilación que parece proporcionar esta funcionalidad, pero no lo he usado antes.
  2. Hack: hay un truco descrito aquí , pero el autor recomienda no hacerlo, y además: si vas a tomar el tiempo para modificar tu POM y crear este truco, también puedes hacer las cosas de la manera correcta e implementar un perfil.

Parece que no hay una buena manera de configurar Lombok Maven. El enfoque de "perfil" sugerido por @opyate no funciona debido a

http://jira.codehaus.org/browse/MNG-5310

Sin embargo, una solución realmente fea es simplemente tener otro pom.xml , idéntico en todos los sentidos, excepto con el sourceDirectory redefinido, usando los argumentos de línea de comando para usar el archivo como en:

Maven pom alternativa