Конвертация муравья в Maven: проблема с целевым атрибутом «зависит» от муравья - PullRequest
1 голос
/ 29 июля 2010

Я конвертирую муравья в maven2. В build.xml у меня есть:

<target name="clean">
  <delete file="${dir.dist}/${api.jarfile}" />
  <delete dir="${dir.build}/**" />
</target>
<target name="prepare1" depends="clean">
  <mkdir dir="${dir.build}" />
  <mkdir dir="${dir.generated.code.junit}/build" />
  <mkdir dir="${dir.dist}" />
</target>
<target name="prepare2" depends="clean">
  <mkdir dir="${dir.deploy}" />
  <mkdir dir="${dir.dist}" />
</target>

Я использую maven-antrun-plugin, который отлично работает с первой целью. Однако для второй цели antrun не поддерживает «зависит». Я могу сделать такой трюк: поставить первую цель в чистую фазу, а вторую в пост-чистую фазу. Таким образом, вторая цель будет выполняться после первой цели. Но для 3-й цели этот прием не сработает, потому что 3-ю цель следует запускать только после 1-й цели (я не хочу, чтобы 2-я цель запускалась при 3-м запуске).

В любом случае, этот трюк не сработает, потому что мой build.xml - это большой файл со многими целями, и отношения между ними сложны.

Есть ли способ исправить это? Есть ли в maven что-то, что делает одну задачу зависимой от другой?

1 Ответ

1 голос
/ 30 июля 2010

а) Почему бы просто не бросить их вместе? Когда вы запускаете муравей с maven, вы все равно не можете вызывать отдельные цели, вы привязываете муравейник к фазе maven. Таким образом, вы можете сделать следующее в чистой фазе:

  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.4</version>
    <executions>
      <execution>
        <phase>clean</phase>
        <configuration>
          <tasks>
             <delete file="${dir.dist}/${api.jarfile}" />
             <delete dir="${dir.build}/**" />
             <mkdir dir="${dir.build}" />
             <mkdir dir="${dir.generated.code.junit}/build" />
             <mkdir dir="${dir.dist}" />
             <mkdir dir="${dir.deploy}" />
             <mkdir dir="${dir.dist}" />
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

и, если вам нужно больше работать на других этапах, добавьте больше исполнений:

      </execution> <!-- end tag from above -->
      <execution>
        <phase>generate-sources</phase>
        <configuration>
          <tasks>
               <!-- some more ant tasks -->
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>

б) если вы используете maven, вы должны думать так же, как maven. Многое из того, что вы делаете в своей задаче ant, - поведение по умолчанию maven.

На этапе очистки выполняется цель clean: clean , которая удаляет целевой каталог (и jar вместе с ним). Если вы поместите все используемые вами каталоги под цель (что считается хорошей практикой в ​​maven), maven автоматически удалит их (и создаст).

Maven это все о конвенции:

  • все, что генерируется, попадает внутрь цели
  • классы и ресурсы для основного артефакта входят в цель / классы
  • классы и ресурсы для тестирования идут внутри target / test-classes
  • сгенерированные ресурсы попадают внутрь target / генерируемые ресурсы / yourfoldername
  • сгенерированные источники попадают внутрь target / генерируемые источники / yourfoldername

Все основные плагины ожидают, что вы будете следовать этим соглашениям (они имеют значения по умолчанию в соответствии с ними), и их использование значительно облегчит жизнь maven.

например. mvn clean гарантирует, что вы удалите все, что было сгенерировано. Есть несколько исключений: плагины, которые должны хранить данные в разных местах и ​​поэтому не могут быть выбраны командой clean: clean. Эти плагины обычно предоставляют альтернативные чистые mojos ( eclipse: clean и idea: clean являются примерами), но стараются не создавать больше исключений.

Кроме того, в соответствии с конвенцией maven, ничего не должно создаваться на этапе очистки. Есть много фаз для генерации вещей, таких как generate-resources, generate-sources, generate-test-resources, generate-test-sources. Кроме того: создание папок обычно не требуется, все известные мне плагины maven создают папки по мере необходимости при записи файлов.

...