【问题标题】:How to set the Maven artifactId at runtime?如何在运行时设置 Maven artifactId?
【发布时间】:2017-03-16 17:32:32
【问题描述】:

我想在运行时在 POM 中定义 artifactId。从this question 的回答中我知道这是不好的做法,应该使用 Maven 原型,但我真的很想知道这是否可能。

目前我有一个带有这样的 artifactId 的 POM:

<artifactId>myproject${var}</artifactId>

我可以通过在命令行设置变量成功构建项目:

mvn install -Dvar=justatest

现在可以在运行时更改此输入变量吗?例如将其转换为大写(例如使用 gmaven-plugin)或类似的?

【问题讨论】:

  • 运行时是什么意思?你的意思是在 Maven 构建期间?
  • 是的,在“mvn build”期间
  • 那有什么用例?
  • 用例与问题中描述的一样简单。我有一个成功构建并以传入参数命名的 POM,我想将该参数更改为大写。
  • 我没有看到用例,除了你写的你想这样做......所以结果它没有意义。这会产生不可重现的构建。更改 artifactId 没有意义。我假设您不会通过属性更改 Java 类的名称?

标签: maven pom.xml


【解决方案1】:

不能在构建时更改 artifactId。它是 Maven 坐标 (groupId:artifactId:version) 的一部分,因此必须修复。

您可以在构建过程中使用maven-antrun-plugin 更改所有其他参数。

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>touppercase</id>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <property name="varUpper" value="${var}"/>
                    <script language="javascript"> <![CDATA[
                        property = project.getProperty("varUpper");
                        project.setProperty("varUpper", property.toUpperCase());
                    ]]> </script>
                </target>
                <exportAntProperties>true</exportAntProperties>
            </configuration>
        </execution>
    </executions>
</plugin>

执行此操作后,Maven 将拥有一个名为${varUpper} 的新属性,它是大写的${var}。您需要为上面的 sn-p 设置正确的阶段以匹配您的构建过程。

【讨论】:

  • 这不适用于更改项目的 。似乎没有足够早的阶段来应用此脚本来更改“project.artifactId”属性。
  • @dokaspar 您不能在构建时更改 artifactId。它是 Maven 坐标 (groupId:artifactId:version) 的一部分,因此必须修复。此解决方案适用于所有其他属性。
  • 那是我正在寻找的真正答案:D
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2011-01-18
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多