Есть ли плагин, который позволяет загружать / использовать не-Maven-зависимости? - PullRequest
12 голосов
/ 05 февраля 2011

Мне нужно использовать стороннюю библиотеку JAR в моем проекте (на самом деле это Dresden OCL для Eclipse ), которая не предоставляется в качестве артефакта Maven.Вместо этого это просто загружаемый файл JAR.Могу ли я поручить Maven использовать этот файл JAR так же, как я использую <dependencies>?Я полагаю, что для этого должен быть какой-то плагин?

ps.Я просто не хочу добавлять 35Mb сторонних двоичных файлов в мой SVN-репозиторий.

Было бы неплохо настроить его следующим образом:

<build>
  <plugins>
    <plugin>
      <groupId>com.example</groupId>
      <artifactId>non-maven-dependencies-injector</artifactId>
      <configuration>
        <libraries>
          <library>http://www.example.com/something*.jar</library>
          <library>http://www.example.com/something-else*.jar</library>
        </libraries>
      </configuration>
    </plugin>
  <plugins>
</build>

И этот плагин будет 1)загрузите эти файлы JAR и 2) добавьте их как зависимости в pom.xml.Может быть, этот плагин может хранить их где-то в ~/.m2/temp/ ...

Ответы [ 8 ]

12 голосов
/ 05 февраля 2011

да, вы можете установить его в свой локальный репозиторий с помощью плагина maven-install

mvn install:install-file -Dfile=your-artifact-1.0.jar \
                         -DgroupId=org.some.group \
                         -DartifactId=your-artifact \
                         -Dversion=1.0 \
                         -Dpackaging=jar \
                         -DgeneratePom=true

Если вы хотите, чтобы другие члены вашей команды могли загружать эту зависимость, не устанавливая ее самостоятельно, вам нужно настроить собственное репозиторий артефактов и развернуть там артефакт с помощью maven-deploy-plugin так же, как вы установил его локально.

6 голосов
/ 08 мая 2013

Да. Это (с использованием немавенизированных зависимостей) поддерживается maven-external-dependency-plugin .

Пример:

<artifactItem>
    <groupId>jwbroek.cuelib</groupId>
    <artifactId>cuelib</artifactId>
    <version>${cuelib-version}</version>
    <packaging>jar</packaging>
    <downloadUrl>http://cuelib.googlecode.com/files/cuelib-${cuelib-version}.jar</downloadUrl>
    <checksum>d03b6b960b3b83a2a419e8b5f07b6ba4bd18387b</checksum>
</artifactItem>

Может также извлекать артефакты из zip-файлов :

<artifactItem>
    <groupId>mediautil</groupId>
    <artifactId>mediautil</artifactId>
    <version>${mediautil-version}</version>
    <packaging>jar</packaging>
    <install>true</install>
    <force>false</force>
    <downloadUrl>http://downloads.sourceforge.net/project/mediachest/MediaUtil/Version%201.0/mediautil-1.zip</downloadUrl>
    <checksum>aa7ae51bb24a9268a8e57c6afe478c4293f84fda</checksum>
    <extractFile>mediautil-${mediautil-version}/mediautil-${mediautil-version}.jar</extractFile>
    <extractFileChecksum>e843cd55def75dce57123c79b7f36caca4841466</extractFileChecksum>
</artifactItem>
2 голосов
/ 08 февраля 2011

Принимая во внимание, что ваш пример Dresden OCL содержит более 20 JAR-файлов, и вам необходимо распространить его среди многих разработчиков, лучшим решением будет установить где-нибудь менеджер репозитория (например, nexus или artifactory), не торопитесь загружать этифляги к тому хранилищу, и используйте их.Лучше всего было бы поместить их в закрытый идентификатор группы, поэтому , если когда-нибудь они будут опубликованы в репо м2, у вас не будет конфликтов имен.

Еще один момент,было бы спросить Дрездена OCL Maintainers, могут ли они предложить хранилище m2.Теперь, когда m2eclipse является проектом инкубатора затмений, это может заинтересовать больше людей.

2 голосов
/ 05 февраля 2011

Вы можете использовать "system" -scope в pom.xml для зависимостей локальной библиотеки:

systemЭта область похожа на предоставленную, за исключением того, что вы должны предоставить JAR, который содержит ее явно.Артефакт всегда доступен и не просматривается в репозитории.

systemPathиспользуется только в том случае, если область зависимостей является системной.В противном случае сборка не удастся, если этот элемент установлен.Путь должен быть абсолютным, поэтому рекомендуется использовать свойство для указания машинного пути (подробнее о свойствах ниже), например, $ {java.home} / lib.Поскольку предполагается, что зависимости области действия системы установлены априори, Maven не будет проверять репозитории для проекта, а вместо этого проверяет, существует ли файл.Если нет, Maven не выполнит сборку и предложит вам загрузить и установить ее вручную.

<dependency>
    <groupId>some.id</groupId>
    <artifactId>artifact</artifactId>
    <version>1.2.3</version>
    <scope>system</scope>
    <systemPath>${basedir}/path/to/jarFile.jar</systemPath>
</dependency>

AFAIK, вы можете использовать в значительной степени то, что вы хотите для groupId, artifactId и версии.См. Системные зависимости Maven и этот вопрос.

0 голосов
/ 05 декабря 2013
I think the below answer will help you...just place jar files on your SVN and tell them all to e synch with SVN and here the ${lib.directory}    will be t he local path

 <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-install-plugin</artifactId>
                  <version>2.4</version>
                  <executions>
                      <execution>
                          <id>db2jcc9</id>
                          <phase>compile</phase>
                          <goals>
                              <goal>install-file</goal>
                          </goals>
                          <configuration>
                              <groupId>com.ibm</groupId>
                              <artifactId>db2jcc</artifactId>
                              <version>9</version>
                              <packaging>jar</packaging>
                              <file>${lib.directory}\db2jcc-9.jar</file>
                          </configuration>
                      </execution>
                      </executions>
    <plugin>
0 голосов
/ 06 апреля 2011

Вот другой подход, который позволит добавить репозиторий Maven в директорию проекта, использовать его в качестве репозитория у вас pom.xml и делиться репозиторием в SVN с любым, кто проверяет проект. Отсюда кросспост.

В папке вашего проекта создайте папку с именем repo, которую мы будем использовать в качестве хранилища на основе папок Maven.

Добавьте следующий файловый репозиторий в свой проект pom.xml:

<repositories>
    <repository>
        <id>file.repo</id>
        <url>file://${project.basedir}/repo</url>
    </repository>
</repositories>

Разверните внешние файлы в хранилище файлов с помощью следующей команды:

mvn deploy:deploy-file
-Durl=file:///absolute/path/to/your-project/repo \
-DrepositoryId=file.repo \
-Dfile=path-to-your.jar \
-DgroupId=some.external.project.group \
-DartifactId=the-artifact-name \
-Dversion=1.0 \
-Dpackaging=jar;

Последля этого вы можете просто добавить обычную зависимость от jar в вашем проекте pom.xml, используя значения для groupId, artifactId и версии, которые вы передали выше.Затем вы можете добавить папку репозитория в SVN и зафиксировать изменения в pom.xml.Любой разработчик, проверяющий ваш проект, теперь сможет без труда использовать эту же зависимость.

0 голосов
/ 06 февраля 2011

Упомянутое здесь «mvn install: install-file» поможет вам установить файлы jar в ваш локальный репозиторий.Однако, если вы хотите, чтобы эти банки впоследствии были доступны для разработчиков проекта автоматически, скопируйте соответствующие фрагменты в репозиторий, доступный для всех в проекте, и сделайте этот репозиторий доступным с помощью тега, например, проверив все файлы вSVN.См., Например, http://code.google.com/p/codebistro/wiki/BuildNumber#Maven_Plugin_Example, который ссылается на репозиторий, размещенный в SVN.

PS Удачного путешествия к SV!

0 голосов
/ 05 февраля 2011

Вы можете установить его локально или развернуть в своем локальном (например, в масштабе всей компании) хранилище.Если вы используете зависимость, которую maven не может найти в настроенных репозиториях, она даже дает вам необходимые команды:

Затем установите ее с помощью команды: mvn install: install-file -DgroupId = mygid -DartifactId= myaid -Dversion = 1.0 -Dpackaging = jar -Dfile = / path / to / file

В качестве альтернативы, если вы размещаете свой собственный репозиторий, вы можете развернуть файл там: mvn deploy: deploy-file -DgroupId = mygid-DartifactId = myaid -Dversion = 1.0 -Dpackaging = jar -Dfile = / path / to / file -Durl = [url] -DrepositoryId = [id]

Обратите внимание: таким образом вы только добавляете.jar для вашего репозитория, вместе с ним не будет pom, чтобы указать временные зависимости.Поэтому, если ваша сторонняя библиотека имеет собственные зависимости, вам придется добавить их вручную в ваш файл pom.xml, поскольку не будет автоматического разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...