Шаблонный Maven Архетип

1

Я создаю свой собственный архетип 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
maven-plugin
maven-archetype

1 ответ

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
    Спасибо за Ваш ответ. Я еще не пробовал, но звучит многообещающе. Я попробую это прямо сейчас.
  • 0
    Спасибо, это сработало, как вы описали. Он сделал именно то, что мне было нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню