2014-05-29 3 views
1

Я создаю свой собственный архетип maven, который является общим шаблоном для проектов, которые я использую.Templating a Maven Archetype

В этом шаблоне у меня есть несколько блоков «exec-maven-plugin», которые действительно различаются для каждого проекта, что означает, что в проекте у меня могут быть 2 блока exec-maven-plugin, а в другом - может иметь 3 или более.

Я хотел бы, чтобы это был водитель от пользователя, в то время, когда он создает проект с использованием архетипа, который я создал. Например, пользователю будет предложено несколько основных классов, и в зависимости от того, сколько он выбирает для ввода, необходимо создать много блоков «exec-maven-plugin».

Например, если пользователь будет предложен для основных классов, которые он будет иметь он мог бы войти: com.domain.MyFirstMain, com.domainMySecondMain Таким образом, специалист 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?

спасибо.

ответ

2

Должно быть возможно сделать то, что вы хотите. 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 .... 
+0

Спасибо за ваш ответ. Я еще не пробовал, но это звучит многообещающе. Я попробую сразу. – nikkatsa

+0

Спасибо, это сработало, как вы описали. Он сделал именно то, что мне нужно. – nikkatsa

Смежные вопросы