模仿Maven原型

时间:2014-05-29 12:23:40

标签: java maven maven-plugin maven-archetype

我正在创建自己的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中添加所需的块?

谢谢。

1 个答案:

答案 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 ....