我正在创建自己的maven原型,这是我使用的项目的常用模板。
在那个模板中我有一些“exec-maven-plugin”块,实际上每个项目都有所不同,这意味着在一个项目中我可能有2个“exec-maven-plugin”块而另一个我可能有3个或更多。
我希望用户是驱动程序,当时他使用我创建的原型创建项目。例如,将要求用户提供许多主类,并根据他选择输入的数量,应该创建许多“exec-maven-plugin”块。
例如,如果要求用户输入他将要输入的主要类: com.domain.MyFirstMain,com.domainMySecondMain 因此,maven pom.xml应该类似于下面的内容:
<profiles>
<profile>
<id>Main1</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<executable>java</executable>
<arguments>
<argument>com.domain.MyFirstMain</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>Main2</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<executable>java</executable>
<arguments>
<argument>com.domain.MySecondMain</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
有没有人知道我是否可以在创建maven原型时实现这一目标,或者唯一的方法是让用户在pom.xml中添加所需的块?
谢谢。
答案 0 :(得分:2)
应该可以做你想做的事。当将它们复制到新项目时,Maven使用Apache Velocity来处理原型文件。我通过提示原型用户参数&#34; useSomeFeature&#34;成功地做了类似的事情。如果响应以&#39; Y&#39;开头,则添加插件执行或者&#39; y&#39;,例如。
我的用例根据布尔回复添加了文本;你的用例需要一个for循环。它看起来像这样。请注意,这是未经测试的代码,我留给您以使语法完全正确,添加任何所需的错误处理,并使其工作。 :)无论如何,你有这个想法。
## archetype-resources/pom.xml
## assumes the template variable holding the main class list is mainClassAnswer
#set( $mainClasses = $mainClassAnswer.split(","))
.... basic POM elements here ....
<profiles>
#set ( $loopCount = 0 )
#foreach( $mainClass in $mainClasses )
#set ( $trimmedMainClass = $mainClass.trim() )
#set ( $loopCount = $loopCount + 1 )
<profile>
<id>Main${loopCount}</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<executable>java</executable>
<arguments>
<argument>${trimmedMainClass}</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
#end
</profiles>
.... rest of POM here ....