Como posso adicionar uma propriedade calculada a um projeto Maven usando um plug -in?
-
05-07-2019 - |
Pergunta
Eu escrevi um plug -in maven para pegar o endereço IP da máquina e gostaria de poder criar uma propriedade para que o endereço IP seja filtrado em um arquivo (via $ {ipaddress}) quando a geração do arquétipo ocorrer.
Não consegui descobrir como fazer isso. Alguém sabe?
Solução
o Propriedades-maven-plugin lê propriedades de um arquivo e as disponibiliza para uma construção como se tivessem sido definidas em linha.
Você pode ter o seu plug -in que o IP em um arquivo e depois use o plug -in Properties para lê -lo ou prenda o fonte Do plug -in Properties para definir a propriedade em seu próprio plug -in.
Essencialmente, você apenas obtém as propriedades do MavenProject e adiciona sua própria entrada/IES.
Outras dicas
Você pode usar o plugin org.codehaus.groovy.maven para obter IP e defini -lo como adereços. No meu exemplo, eu defini o IP recuperado para o Property Localip e ele está disponível nos próximos estágios como quaisquer outros adereços do Maven, ou seja, 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>
Bem, o problema é: suas propriedades são processadas antes da você executa a construção e não pode ser substituído durante a construção. Pelo menos essa é a minha experiência, eu adoraria ser provada errada e até aceitar pontos negativos para isso :) Então, uma possibilidade - crie um script que executa seu programa, preenche a propriedade do sistema e depois executa mvn build
Logo depois (eu sei que é feio)