Как добавить вычисляемое свойство в проект Maven с помощью плагина?

StackOverflow https://stackoverflow.com/questions/1610379

Вопрос

Я написал плагин 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 (я знаю, это уродливо)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top