Maven-在构建之前更新artifactId

时间:2019-06-24 11:27:31

标签: java maven maven-plugin

我需要将项目部署到工件中。为此,我将maven-assembly-plugin与artifactory-maven-plugin一起使用

此CMD仅可用于构建mvn(可能会进行小更新):

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 :(得分:0)

无法完成。

<artifactId>中使用的属性只能通过命令行设置。您没有机会在Maven中操纵它们。我看到的唯一机会是更改命令行,以便在将参数发送到Maven之前执行 替换。

答案 1 :(得分:0)

我找到了解决问题的方法。但是我不确定解决方法是否正确。我使用了插件 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()”中读取工件ID,因此我直接对其进行更新。 所以我直接在Maven实例中更新了工件ID。 正如我说的那样,这不是100%正确,但对我来说有帮助

答案 2 :(得分:-2)

您可以使用buildhelper插件来执行此操作,它的目标regex-property可以根据初始值(您的service_name属性)设置一个属性,并使用正则表达式替换为替换值。

usage page中的示例(由于使用的值没有意义而进行了修改):

<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>