2015-09-30 121 views
0

我想在运行时在POM中定义artifactId。我知道从this question的答案,这是不好的做法,应该使用Maven原型,但我真的想知道它是否有可能。如何在运行时设置Maven artifactId?

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

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

,我可以通过设置命令行中的变量成功打造项目:

mvn install -Dvar=justatest 

现在是有可能在运行时更改此输入变量?例如,将其转换为大写(例如使用gmaven插件)还是类似的?

+0

你是什么意思的运行时?你的意思是在Maven构建过程中? – Tunaki

+0

是的,在'mvn build' – dokaspar

+0

这是什么用例? – khmarbaise

回答

2

不能在构建时更改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将有一个名为新的属性是大写${var}。您需要将正确的阶段设置为上面的代码片段以符合您的构建过程。

+0

这不适用于更改项目的。似乎没有足够早的阶段来应用此脚本来更改“project.artifactId”属性。 – dokaspar

+0

@dokaspar你不能在构建时改变artifactId。它是Maven坐标的一部分(groupId:artifactId:version),所以它必须被修复。此解决方案将适用于所有其他属性。 – Tunaki

+0

这是我正在寻找的真正答案:D – dokaspar