Интеграция целей генерации муравейников в сборку Maven - PullRequest
1 голос
/ 01 июня 2011

В настоящее время я работаю над довольно крупным проектом, который был перенесен из Ant в Maven. Нет проблем с самим процессом сборки (он прекрасно компилирует и упаковывает исходный код).

Проблема в том, что у меня также есть много целей, которые генерируют дополнительные ресурсы для проекта (компилируют LessCSS, генерируют и загружают документацию, генерируют tld файлы для пользовательских тегов и функций и т. Д.). Я не уверен, как я должен справиться с этими задачами. Давайте возьмем цель, которая строит CSS и JS в качестве примера (другие более или менее похожи, но не связаны). Это выглядит так (упрощенно):

<target name="build.css_js">
    <concat destfile="${webapp.dir}/scripts/main.js">
        <fileset dir="${webapp.dir}/scripts/src" includes="*.js"/>
    </concat>

    <!-- build css files from less sources -->
    <taskdef name="lesscss" classname="com.asual.lesscss.LessEngineTask" classpathref="libraries" />
    <lesscss input="${webapp.dir}/syles/src/input.less" output="${webapp.dir}/styles/output.css" />
</target>

В pom.xml у меня установлен следующий плагин:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <configuration>
               <tasks>
                   <echo message="Hello World from pom.xml"/>
                   <ant target="build.css_js"/>
               </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Зависимости, которые я использую, больше не находятся в нашем репозитории SVN (так как они управляются Maven), поэтому я переключил переменную библиотеки, чтобы указать на репозиторий Maven:

<property name="lib.dir" location="${env.HOMEPATH}/.m2/repository" />

Это не хорошо, так как этот путь может быть действителен только на моей машине. Я не знаю другого способа ссылаться на библиотеки из репозитория Maven, и мне нужны они для запуска целей ant.

  • Мой подход в порядке или есть способ лучше?
  • Как мне решить проблему с библиотекой?
  • Некоторые ресурсы необходимы при упаковке проекта, но некоторые - нет. Есть ли фаза жизненного цикла, которая выходит за рамки компиляции / пакета? Я обнаружил жизненный цикл site, который, я думаю, соответствует моим потребностям.
  • В идеале, мне следует полностью отказаться от файла сборки ant, но я не уверен, стоит ли пытаться заставить скрипты работать как плагины maven (в настоящее время я понятия не имею, как это сделать). Что вы думаете об этом?

Я новичок в Maven, поэтому любые предложения приветствуются.

1 Ответ

1 голос
/ 02 июня 2011

Обычно встраивание вызовов antrun не является идеальным, но если вы не нашли подходящий плагин, чтобы делать то, что вам нужно, я бы не беспокоился об этом.Если обработка довольно проста, на самом деле довольно легко внедрить ее в плагин Maven самостоятельно, см. этот пример для получения справки по началу работы.

Если вы используете antrun и зависимостьjars уже установлены в вашем репозитории Maven, вы можете настроить плагин antrun для использования этих jar-файлов при его выполнении, добавив их как зависимости от конфигурации плагина.Это означает, что зависимости будут разрешены и доступны для использования, но не будут видны вашему проекту (полезно, чтобы избежать случайного включения).Чтобы затем получить к ним доступ в портативном режиме, вы можете использовать:

<property name="lib.dir" location="${settings.localRepository}" />

В качестве альтернативы вы можете использовать некоторые другие доступные свойства для отображения путей классов Maven для плагина antrun, например ${maven.compile.classpath} См. документация antrun для получения более подробной информации.

Если у вас есть несколько отдельных исполнений для ant, вы можете настроить их индивидуально в модуле antrun и указать подходящий id для каждого.В приведенном ниже примере показаны два выполнения, оба связаны с фазой ресурсов процесса.Конечно, вам нужно поставить некоторые реальные цели.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>build-css</id>
      <phase>generate-resource</phase>
      <configuration>
        <target>
          ...
        </target>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
    <execution>
      <id>build-js</id>
      <phase>generate-resource</phase>
      <configuration>
        <target>
          ...
        </target>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>some.group.id</groupId>
      <artifactId>artifactId</artifactId>
      <version>1.4.1</version>
    </dependency>
    <dependency>
      <groupId>another.group.id</groupId>
      <artifactId>anotherId</artifactId>
      <version>1.0.1</version>
    </dependency>
  </dependencies>

...