我正在创建自己的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中添加所需的块?
谢谢。
应该可以做您想做的事。当将原型文件复制到新项目时,Maven使用Apache Velocity处理原型文件。我已经成功完成了类似的工作,例如,提示原型用户输入参数“ useSomeFeature”,并在响应以“ Y”或“ y”开头的情况下添加插件执行。
我的用例基于布尔回复添加了文本;您的用例需要一个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 ....