Используйте Maven только для того, чтобы получить некоторые библиотечные банки - PullRequest
13 голосов
/ 31 декабря 2010

Мы используем ANT для нашего процесса сборки и не планируем менять это в ближайшем будущем.

Можно ли использовать Maven, чтобы просто извлечь общие файлы JAR с открытым исходным кодом (например, Log4J, SWT, JFace) и поместить их в нужное место нашего проекта, поэтому нам не нужно хранить их в нашем контроле версий & mdash; предпочтительнее без создания типичного Maven-кэша в домашнем каталоге?

Ответы [ 4 ]

18 голосов
/ 02 января 2011

НЕТ НЕТ НЕТ Все!

Если вы используете Ant, лучший способ использовать репозитории Maven для загрузки jar-зависимостей - это использовать Ivy с Ant. Это именно то, для чего Айви.

Установить Ivy и приступить к работе с текущими проектами Ant очень просто. Он работает с Nexus и Artifactory, если вы используете их в качестве локальных репозиториев Maven.

Взгляните на Плющ . Это, вероятно, именно то, что вы хотите.

6 голосов
/ 31 декабря 2010

В варианте ответа org.life.java я бы не делал mvn install.

Вместо этого в файле pom.xml я бы добавил следующий бит:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Теперь вам просто нужно сделать mvn generate-sources, что намного быстрее, чем полный mvn install, и все зависимости будут скопированы в указанный каталог.


Да, кстатиРазве это не то, о чем Apache Ivy ?Расширяете ли Ant, чтобы понимать управление зависимостями Maven?

4 голосов
/ 02 января 2011

Возможно, вы должны использовать maven-ant-tasks .

В частности, это dependencies муравьиная задача. С этой настройкой установка Maven не требуется.

<?xml version="1.0" encoding="UTF-8"?>
<project
  name="download-dependency"
  basedir="."
  default="download-dependency"
  xmlns:artifact="antlib:org.apache.maven.artifact.ant"
>
  <target name="download-dependency">

    ... define properties ...

    <taskdef
      resource="org/apache/maven/artifact/ant/antlib.xml"
      uri="antlib:org.apache.maven.artifact.ant"
    />

    <artifact:dependencies>
      <localRepository path="${local-repo.dir}"/>
      <remoteRepository id="central" url="${repository-uri}"/>
      <dependency
        groupId="${groupId}"
        artifactId="${artifactId}"
        version="${version}"
        type="${type}"
        classifier="${classifier}"
        scope="runtime"
      />
    </artifact:dependencies>
  </target>
</project>

Единственный двоичный файл, который вы должны проверить в своем проекте, это maven-ant-tasks.jar.

На самом деле в нашем проекте я использовал Sonatype Nexus ( документация ) Менеджер хранилища Maven для централизации доступа к различным хранилищам и даже для поддержки некоторых двоичных файлов, уникальных для нашей среды. С помощью Nexus я просто получаю maven-ant-tasks.jar с заданием ant <get> с известного URL. Вам не нужно использовать Nexus, но он значительно ускоряет сборку, потому что он кэширует двоичные файлы рядом с компьютерами вашего разработчика.

2 голосов
/ 29 октября 2012

Ivy делает именно так, когда запускается сам:
http://ant.apache.org/ivy/history/latest-milestone/samples/build.xml

<property name="ivy.install.version" value="2.0.0-beta1"/>
<property name="ivy.jar.dir" value="lib"/>
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>
<target name="resolve" unless="skip.download">
    <mkdir dir="${ivy.jar.dir}"/>
    <echo message="installing ivy..."/>
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/>
</target> 
...