¿Cómo puedo agregar una propiedad calculada a un proyecto de Maven usando un complemento?
-
05-07-2019 - |
Pregunta
He escrito un complemento de Maven para obtener la dirección IP de la máquina y me gustaría poder crear una propiedad para que la dirección IP se filtre en un archivo (a través de $ {ipaddress}) cuando ocurra la generación del arquetipo.
No he podido encontrar cómo hacer esto. ¿Alguien sabe?
Solución
El properties-maven-plugin lee las propiedades de un archivo y las crea disponible para una compilación como si se hubieran definido en línea.
Puede hacer que su complemento envíe la ip a un archivo y luego usar el complemento de propiedades para leerlo, o pellizcar el source del complemento de propiedades para configurar la propiedad en su propio complemento.
Esencialmente, solo obtienes las Propiedades del Proyecto Maven y agregas tus propias entradas.
Otros consejos
Puedes usar el plugin org.codehaus.groovy.maven para obtener IP y configurarlo en props. En mi ejemplo, he establecido la IP recuperada en la propiedad localIP y está disponible en las siguientes etapas como cualquier otro utilitario experto, es decir, como $ {localIP}.
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>get-local-ip</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<classpath>
<element>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</element>
</classpath>
<source>
java.net.InetAddress address=InetAddress.getByName("${env.COMPUTERNAME}");
project.properties.localIP=address.getHostAddress();
</source>
</configuration>
</execution>
</executions>
</plugin>
Bueno, el problema es que sus propiedades se procesan antes de ejecutar la compilación y no se pueden sobrescribir durante la compilación. Al menos esa es mi experiencia, me encantaría que me demostraran que estoy equivocado e incluso que acepte puntos negativos por eso :)
Una posibilidad: crear un script que ejecute su programa, rellene las propiedades del sistema y luego ejecute mvn build
justo después (sé que es feo)