Подтвердить что ты не робот

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

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

пс. Я просто не хочу добавлять 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/...

4b9b3361

Ответ 1

Да. Это (с использованием не-Mavenized зависимостей) поддерживается 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

да, вы можете установить его в свой локальный репозиторий с помощью плагина 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 так же, как вы локально установлен.

Ответ 3

Вы можете использовать "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 System Depencies и этот вопрос.

Ответ 4

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

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

Ответ 5

Вы можете установить его локально или развернуть его на локальном (например, в масштабе всей компании) репозитории на вашем сайте. Если вы используете зависимость, которую 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, поскольку автоматическое разрешение не будет.

Ответ 6

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

P.S. Проведите безопасное путешествие в SV!

Ответ 7

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

В каталоге проекта создайте папку с именем 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. Любой разработчик, который проверяет ваш проект, теперь сможет использовать одну и ту же зависимость без каких-либо усилий.

Ответ 8

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>