Как добавить вычисляемое свойство в проект Maven с помощью плагина?
-
05-07-2019 - |
Вопрос
Я написал плагин Maven для захвата IP-адреса компьютера и хотел бы иметь возможность создать свойство, чтобы IP-адрес фильтровался в файл (через $ {ipaddress}) при генерации архетипа.
Я не смог найти, как это сделать. Кто-нибудь знает?
Решение
properties-maven-plugin считывает свойства из файла и создает их доступны для сборки, как если бы они были определены встроенными.
Вы можете либо сделать так, чтобы ваш плагин выводил ip в файл, а затем использовать плагин свойств для его чтения, либо зажать source из плагина свойств, чтобы установить свойство в своем собственном плагине.
По сути, вы просто получаете свойства из MavenProject и добавляете свои собственные записи.
Другие советы
Вы можете использовать плагин org.codehaus.groovy.maven, чтобы получить IP и установить его в реквизит. В моем примере я установил извлеченный IP для свойства localIP, и он будет доступен на следующих этапах, как и любой другой реквизит maven, то есть как $ {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>
Проблема в том, что ваши свойства обрабатываются до того, как вы запустите сборку, и не могут быть перезаписаны во время сборки. По крайней мере, таков мой опыт, и я бы хотел, чтобы его ошиблись и даже приняли за это отрицательные моменты :)
Так что одна возможность - создать скрипт, который запускает вашу программу, заполняет системное свойство, а затем сразу же запускает mvn build
(я знаю, это уродливо)