Можно ли в явном виде указать maven загрузить и установить артефакт в локальный репозиторий? - PullRequest
2 голосов
/ 18 июня 2009

Да, я прочитал Утилита для загрузки артефактов из репозитория Maven без mvn / poms и других связанных с этим вопросов, но я не хочу устанавливать файл вручную. На самом деле я хочу иметь что-то вроде wget для maven, которое выбирает артефакт (с зависимостями) и помещает его куда-либо или устанавливает в локальном хранилище. Возможно ли плагин, который делает это?

Ответы [ 5 ]

2 голосов
/ 18 июня 2009

Существует цель dependency:get, как описано в руководстве по плагину для зависимостей .

Эта функция была запрошена по этому билету на jira .

Но я попробовал это с Maven 2.1.0, и это не сработало.

2 голосов
/ 18 июня 2009

Я не уверен, существует ли плагин Maven для этого, но довольно просто использовать для этой цели Maven Ant Вам не нужно иметь Maven или POM-файл, только Ant и этот файл сборки:

<?xml version="1.0" encoding="UTF-8"?>
<project name="mvn-get" default="get" basedir=".">
    <property name="maven.ant.tasks.jar" value="${ant.home}/lib/maven-ant-tasks-2.011.jar" />
    <property name="maven.ant.tasks.bootstrap.location" value="http://apache.inetbridge.net/maven/binaries/maven-ant-tasks-2.0.11.jar" />
    <available property="maven.ant.tasks.jar.exists" file="${maven.ant.tasks.jar}" />

    <!-- This will download the "latest version" of the maven-ant-tasks if needed -->
    <target name="bootstrap_maven" unless="maven.ant.tasks.jar.exists">
        <get src="${maven.ant.tasks.bootstrap.location}" dest="${maven.ant.tasks.jar}" />
    </target>

    <!-- This will initialize all the maven ant tasks and download the requested artifact and its dependencies -->
    <target name="get" depends="bootstrap_maven" xmlns:artifact="urn:maven-artifact-ant">
        <path id="maven.ant.tasks.classpath" path="${maven.ant.tasks.jar}" />
        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven.ant.tasks.classpath" />
        <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
            <isset property="maven.repo.local" />
        </condition>
        <echo>maven.repo.local=${maven.repo.local}</echo>
        <artifact:localRepository id="local.repository" path="${maven.repo.local}" />
        <artifact:dependencies pathId="build.classpath" sourcesFilesetId="sources.id">
            <dependency groupId="${mvn.get.groupId}" artifactId="${mvn.get.artifactId}" version="${mvn.get.version}"/>
            <localRepository refid="local.repository" />
        </artifact:dependencies>
    </target>

</project>

Использование командной строки, подобной следующей, сделает то, что вы хотите:

ant -Dmvn.get.groupId=commons-httpclient -Dmvn.get.artifactId=commons-httpclient -Dmvn.get.version=3.1 -Dmaven.repo.local=.

Вдохновением для этого послужило это отличное сообщение в блоге.

0 голосов
/ 18 июня 2009

Я использую следующий сценарий оболочки, чтобы установить замену Commons Logging, но в этом случае у меня уже есть банки в руке:

#! /bin/sh

mvn install:install-file \
    -DgroupId=commons-logging \
    -DartifactId=commons-logging \
    -Dversion=99.0-does-not-exist \
    -Dpackaging=jar \
    -DcreateChecksum=true \
    -DpomFile=commons-logging-99.0-does-not-exist.pom \
    -Dfile=commons-logging-99.0-does-not-exist.jar

mvn install:install-file \
    -DgroupId=commons-logging \
    -DartifactId=commons-logging-api \
    -Dversion=99.0-does-not-exist \
    -Dpackaging=jar \
    -DcreateChecksum=true \
    -DpomFile=commons-logging-api-99.0-does-not-exist.pom \
    -Dfile=commons-logging-api-99.0-does-not-exist.jar

Когда вы говорите «локальный репозиторий», вы имеете в виду свой собственный, как личность, то есть тот, что находится в ~ / .m2 в unix, или вы имеете в виду репозиторий вашей компании? Это другой вопрос. Для первого я с дрожанием; просто добавьте запись в свой пом. Что касается последнего, проверьте документацию сервера репозитория о том, как получить копию центрального сервера.

0 голосов
/ 18 июня 2009

Вы имеете в виду способ без добавления зависимости в pom.xml ?

Потому что, добавив зависимость к вашему pom.xml , система управления зависимостями maven автоматически получает артефакт из указанных вами хранилищ и устанавливает его в локальном хранилище.

<dependencies>
  <dependency>
    <groupId>foo</groupId>
    <artifactId>foo</artifactId>
    <version>1.0.1</version>
  </dependency>
</dependencies>
0 голосов
/ 18 июня 2009

Я бы исследовал использование подключаемого модуля зависимостей maven в сочетании с подключаемым модулем maven.

...