Maven: Включая банку, не найденную в публичном хранилище - PullRequest
61 голосов
/ 31 августа 2009

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

т.е.

Мое приложение «A» зависит от банки «B», которой нет в общедоступном хранилище. Я, однако, хочу добавить «B» в качестве зависимости к «A» так, чтобы, когда человек на другом конце света мог проверить код и все еще был в состоянии построить «A»

Ответы [ 5 ]

60 голосов
/ 31 августа 2009

Вы можете установить проект самостоятельно.

Или вы можете использовать область действия system, как показано ниже:

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPath требует абсолютного пути проекта. Чтобы сделать это проще, если файл jar находится в репозитории / проекте, вы можете использовать свойство ${basedir}, которое привязано к корню проекта.

16 голосов
/ 24 мая 2012

Если у вас есть родительский проект с модулем, который находится в этой ситуации (требует зависимости, а не из репозитория), вы можете настроить родительский проект на использование плагина exec-maven-plugin для автоматической установки зависимого файла. Например, мне пришлось сделать это с файлом JAR authorize.net, поскольку он не является общедоступным.

POM родителей:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

В приведенном выше примере расположение файла jar находится в папке lib модуля "service".

К тому времени, когда сервисный модуль войдет в фазу проверки, файл jar будет доступен в локальном хранилище. Просто назовите его так, как вы настроили groupid, артефакт и т. Д. В родительском pom. Например:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>
15 голосов
/ 31 августа 2009

Использование системной области может работать, но это не рекомендуется даже в спецификации Maven. это не портативно.

из книги Maven:

system- Объем системы аналогичен предоставленному, за исключением того, что вы должны предоставить явный путь к JAR в локальной файловой системе. Это предназначено для компиляции против собственных объектов, которые могут быть частью системных библиотек. Артефакт предполагается всегда быть доступным и не ищется в хранилище. Если вы объявите сферу быть системным, вы также должны предоставить элемент systemPath. Обратите внимание, что эта область не рекомендуется (вы всегда должны ссылаться на зависимости в общедоступных или пользовательских Maven хранилище).

Наилучшим подходом является установка в локальный репозиторий или в корпоративный репозиторий, чтобы они были доступны для всех ваших коллег.

это очень просто, если вы используете менеджер репозитория, такой как Nexus.

1 голос
/ 02 августа 2016

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

Например.

1.Вставьте банку в локальный репозиторий:

mvn install:install-file -Dfile=<path-to-file>

Примечание: эта команда требует maven-install-plugin версии 2.5 или новее. Если нет, Вы можете обратиться к Здесь

2.используйте jar, добавив зависимость в pom.xml вашего проекта. просто добавьте это в pom.xml вашего проекта:

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

3.Вы можете затем упаковать или развернуть проект, запустив mvn package или mvn deploy

В комплект также войдет баночка стороннего производителя.

0 голосов
/ 27 декабря 2013

Если вы используете набор инструментов groovy / grail ( GGTS ), вы можете напрямую импортировать эту стороннюю зависимость (но убедитесь, что у вас есть эта сторонняя зависимость в вашем локальном репозитории), выполнив следующие шаги:

  1. Перейдите в Project Explorer и щелкните правой кнопкой мыши на проекте.
  2. Выберите вариант import .
  3. Расширьте параметр maven и выберите Установить или развернуть артефакт в хранилище maven и нажмите «Далее».
  4. Брови и выберите эту стороннюю зависимость, используя Файл артефакта и введите данные Идентификатор группы, Идентификатор артефакта и Версия используя файл POM.xml и нажмите finish

Подождите немного, и, возможно, ошибка пошла бы на эту проблему.

...