Maven - обновляет artifactId перед сборкой - PullRequest
1 голос
/ 24 июня 2019

Мне нужно развернуть свой проект в артефакте.Для этого я использую maven-assembly-plugin вместе с artifactory-maven-plugin

. Только для сборки mvn я могу использовать это CMD (возможны небольшие обновления):

mvn -e -B -U clean deploy -DskipIntegrationTests=false -DskipCoverageReport=false  -Dservice_name=sample_service

Что я не могу сделать в команде mvn, так это имя службы обновлений.Это всегда будет «sample_service» или какая-то другая константа, представляющая имя службы

. Поскольку я не знаю имени службы (может быть больше служб), моя базовая часть pom.xml выглядит следующим образом (artifactIdсоздается динамически из свойства service_name):

    <groupId>my.group.id</groupId>
    <artifactId>${service_name}</artifactId>
    <version>2.0.0-SNAPSHOT</version>

Проблема заключается в том, что параметр -Dservice_name всегда состоит из символов подчеркивания.Из-за соглашений, артефакт должен состоять из «тире» вместо «подчеркивания».

Есть ли способ (например, какой-нибудь плагин), как я могу сделать что-то подобное?

    <groupId>my.group.id</groupId>
    <artifactId>${service_name}.replaceAll("_","-")</artifactId>
    <version>2.0.0-SNAPSHOT</version>

Всокращение от свойства service_name Мне нужно заменить подчеркивание на тире перед построением артефакта.

Спасибо за ответы.

Ответы [ 3 ]

0 голосов
/ 24 июня 2019

Это не может быть сделано.

Свойства, используемые внутри <artifactId>, могут быть установлены только через командную строку. У вас нет шансов манипулировать ими в Maven. Единственный шанс, который я вижу, - это изменить командную строку, чтобы вы сделали замену до того, как отправите параметр в Maven.

0 голосов
/ 25 июня 2019

Я нашел решение для моей проблемы.Но я не уверен, что это правильный путь, как это решить.Я использовал плагин gmaven-plugin

        <plugin>
                <groupId>org.codehaus.groovy.maven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>pre-clean</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source>
                                project.getModel().setArtifactId(project.properties["service_name"].replaceAll('_', '-'))
                                project.getArtifact().setArtifactId(project.properties["service_name"].replaceAll('_', '-'))
                            </source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

После этого я использую плагин maven-assembly, который загружает данные в артефакт.И этот плагин считывает идентификатор артефакта из экземпляра "project.getArtifacts ()", поэтому я обновляю его напрямую.Поэтому я обновил идентификатор артефакта непосредственно в экземпляре Maven.Как я говорю, это не на 100 процентов правильно, но в моем случае это помогает

0 голосов
/ 24 июня 2019

Вы можете сделать это с помощью плагина buildhelper, у него есть цель regex-property , которая может устанавливать свойство на основе начального значения (вашего свойства service_name) и регулярного выражения для замены значением замены .

Пример со страницы использования (адаптировано, поскольку используемое значение не имеет смысла):

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>regex-property</id>
            <goals>
              <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>human.version</name>
              <value>${project.version}</value>
              <regex>-SNAPSHOT</regex>
              <replacement> pre-release development version</replacement>
              <failIfNoMatch>false</failIfNoMatch>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
...