如何在运行时设置 Maven artifactId?

How to set the Maven artifactId at runtime?

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

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

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

而且我在命令行设置变量也能成功构建项目:

mvn install -Dvar=justatest

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

不能在构建时更改 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}。您需要为上面的代码片段设置正确的阶段以匹配您的构建过程。