SPRING-SOURCE.RU

Antlib для Maven 2.0

Maven 2.0 теперь поставляется с набором Ant задач, которые могут быть использованы для работы с Maven артефактами. Это включает в себя:

Установка Ant задач

Для удобства, Ant задачи и все зависимости упкованы в один jar файл. Существует два пути использования задач из вашего скрипта.

Установка в Ant lib каталог
Это простейший метод установки, но требует изменений на каждой машине используя build файл. Вы можете разместить JAR в вашем Ant lib каталоге, включить CLASSPATH (переменная окружения) или передать это в Ant, используя -lib команду.

Чтобы использовать этот метод в доступном для вас build файле, добавте следующее пространство имен в начало файла:

      
<project ... xmlns:artifact="antlib:org.apache.maven.artifact.ant">
  ...
		

Объявление typedef
Использование typedef позволяет вам хранить библиотеку где угодно, нужно только указать ее местоположение в build файле.

Следующий пример показывает как это нужно настраивать. Предполагается, что библиотека храниться в lib каталоге вашего проекта.

      
<project ... xmlns:artifact="urn:maven-artifact-ant">
  ...
  <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant">
    <classpath>
      <pathelement location="lib/maven-artifact-ant-2.0-beta-1.jar" />
    </classpath>
  </typedef>
  ...
		

Использование Antlib

Главная цель antlib это использование управлние зависимостями Maven. Это достигается с помощью dependencies задач. Простейший пример:

      
<artifact:dependencies pathId="dependency.classpath">
  <dependency groupId="org.apache.maven.wagon" artifactId="wagon-provider-test"
              version="1.0-alpha-2"/>
  <dependency groupId="org.codehaus.modello" artifactId="modello-core" 
              version="1.0-alpha-2-SNAPSHOT"/>
  <dependency groupId="javax.servlet" artifactId="servlet-api" 
              version="2.4" scope="provided" />
</artifact:dependencies>
		

В примере скачивается три зависимости, и их зависимости, и так далее. Они будут сохранены в локальном репозитории ${user.home}/.m2/repository.

Вы также можете использовать Maven 2.0 POM для объявления ваших зависимостей.

Ссылка PathId не обязательна, но если вы указали ее, то будет создана ссылка classpath которая включает локальные файлы скачанные как зависимости. Это обычно используется для передачи в javac или другие задачи:

      
<javac ...>
  <classpath refid="dependency.classpath" />
  ...
</javac>
		

Другой параметр, который вы можете использовать — filesetId, который будет давать вам fileset ссылку, которая может быть использована для копирования файлов в особое местоположение. Например, для заполнения WEB-INF/lib вашими зависимостями вы должны использовать следующее:

      
<dependencies filesetId="dependency.fileset" useScope="runtime">
  ...
</dependencies>
<copy todir="${webapp.output}/WEB-INF/lib">
  <fileset refid="dependency.fileset" />
  <mapper type="flatten" />
</copy>
		

Обратите внимание на атрибут useScope. Он гарантирует, что ваше web приложение включает только ваши compile и runtime зависимости, исключая те, что используются для тестирования или уже предоставленных в servlet контейнер.

Вы также указываете scope параметр на каждой зависимости. Это приводит к изменению поведения транзитивных зависимостей и это полезно для построения различных типов classpath.

Объявление репозиториев
Все задачи могут желать имет один или более удаленных репозиториев для скачивания и загрузки, и локальных репозиториев для хранения скачанных и установленных архивов.

Это может быть объявлено как id/refid.

Для примера, вы можете указать удаленный репозиторий, которые хочется использовать:

      
<artifact:remoteRepository id="remote.repository" url="http://repository.mycompany.com/" />
...
<artifact:dependencies>
  ...
  <remoteRepository refid="remote.repository" />
</artifact:dependencies>
		

Если никаких удаленных репозиториев не указано, по умолчанию используется  http://repo1.maven.org/maven2.

Заметка. Для работы с транзитивными зависимостями вы должны использовать Maven 2.0 репозиторий.

Установка и развертывание своих артефактов
Если вы хотите использовать артефакты между проектами, вы можете использовать две другие задачи: install для их размещения в локальном репозитории для доступа как к зависимостям в других скриптах, и deploy для развертывания их на удаленном компьютере, который вы установили как репозиторий в вашей организации.

      
...
  <artifact:pom id="maven.project" file="pom.xml" />

  <artifact:install file="target/maven-artifact-ant-2.0-alpha-3.jar">
    <pom refid="maven.project"/>
  </artifact:install>

  <artifact:deploy file="target/maven-artifact-ant-2.0-alpha-3.jar">
    <remoteRepository url="scp://localhost/www/repository">
      <authentication username="${repository.username}" privateKey="${user.home}/.ssh/id_dsa"/>
    </remoteRepository>
    <pom refid="maven.project"/>
  </artifact:deploy>
...
		

Обратите внимание, что установка и развертывание требуют чтобы был Maven 2.0 POM файл. Это нужно для механизма транзитивных зависимостей.

Использование Maven POM файла

В Maven, Project Object Model (POM) представляет единицу работы — один для каждого построенного артефакта.

Давайте посмотрим пример:

      
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.project</groupId>
  <artifactId>project-model</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-provider-api</artifactId>
      <version>1.0-alpha-2</version>
    </dependency>

    <dependency>
      <groupId>org.codehaus.modello</groupId>
      <artifactId>modello-core</artifactId>
      <version>1.0-alpha-2-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>
		

Описание элементов:

Чтобы получить доступ к POM через Ant, вы должны объявить это как ссылку. Например, чтобы получить версию POM, вы должны сделать следующее:

      
 <artifact:pom id="maven.project" file="pom.xml" />

  <echo>The version is ${maven.project.version}</echo>
		

Settings файл (файл настроек)

POM может использоваться для представления большинства информации, доступ к которым можно получить через tasks. Информация которая принадлежит пользователю или окружающей среде, такая как authentication тэг, указывается в settings.xml файле в Maven. Доступ к этой информации также можно получить из Ant задач.

В первую очередь ищется в ${user.home}/.ant/settings.xml, затем в ${user.home}/.m2/settings.xml.

Для примера, давайте укажем настройки прокси сервера в settings.xml файле.

      
<settings>
  <proxies>
    <proxy>
      <protocol>http</protocol>
      <host>proxy.host.net</host>
      <port>8080</port>
      <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
  </proxies>
</settings>