如何在运行时设置 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}
。您需要为上面的代码片段设置正确的阶段以匹配您的构建过程。
我想在运行时在 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}
。您需要为上面的代码片段设置正确的阶段以匹配您的构建过程。