Saltar al contenido

Generación de fuentes ejecutando la clase Java de un proyecto en Maven

El tutorial o código que verás en este post es la solución más eficiente y válida que encontramos a tu duda o problema.

Solución:

Puede ejecutar maven-compile-plugin en la fase de generación de fuentes. Simplemente agregue otra ejecución antes de la ejecución existente y configúrela para que solo recoja las fuentes para el generador.

O divida el proyecto en dos: construya el generador con un POM separado e incluya la biblioteca del generador como una dependencia del POM que genera las fuentes.

Personalmente dividiría el proyecto. Mantiene los archivos de compilación más limpios y fáciles de mantener.

No quería tener 2 proyectos diferentes, así que traté de configurar Maven para agregar el código compilado generado al paquete jar final.

Esta es la solución de trabajo que he usado:

  • En process-classes fase (ejecutada justo después de la compile fase):
    • exec-maven-plugin para ejecutar una clase principal capaz de generar mis archivos fuente en target/generated-sources/java carpeta (en mi caso específico usé la biblioteca Roaster para la generación del código fuente);
    • build-helper-maven-plugin para agregar las fuentes generadas en la ubicación correcta
  • En prepare-package fase:
    • maven-compiler-pluginpara detectar los cambios y recompilar el módulo
    • maven-jar-plugin para producir el paquete de tarro

Este es mi pom.xml:


    

        
            org.codehaus.mojo
            exec-maven-plugin
            1.6.0
            
                
                    process-classes
                    
                        java
                    
                    
                        com.example.MyClassWriter
                        
                            $project.basedir
                            $project.build.directory
                        
                    
                
            
        

        
            org.codehaus.mojo
            build-helper-maven-plugin
            3.0.0
            
                
                    process-classes
                    
                        add-source
                    
                    
                        
                            $project.build.directory/generated-sources/java
                        
                    
                
            
        

        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.6.1
            
                
                    prepare-package
                    
                        compile
                    
                
            
        

        
            org.apache.maven.plugins
            maven-jar-plugin
            3.0.2
            
                
                    prepare-package
                
            
        

    

Para hacer esto en un proyecto, hay 3 pasos:

  1. Compilar código generador

    podemos hacerlo en generate-sources fase, utilizando maven-compiler-plugin. También puede excluir otros archivos de origen.

  2. Ejecutar generador para generar código

    podemos hacerlo en process-sources fase, utilizando exec-maven-plugin.

  3. Compilar proyecto

abajo esta el key parte de pom.xml

  
    org.apache.maven.plugins
    maven-compiler-plugin
    3.8.0
    
      1.8
      1.8
    
    
        
            compile-generator
            generate-sources
            
              compile
            
            
              
                source/file/of/generator/*.java
              
              
                other/source/files/*.java
              
            
        
    
     
  
    org.codehaus.mojo
    exec-maven-plugin
    1.6.0
    
        
            generate-codes
            
                java
            
            process-sources
            
                your.main.class.of.generator
            
        
    
  

Te mostramos reseñas y valoraciones

Te invitamos a añadir valor a nuestra información contribuyendo tu veteranía en las referencias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *