Maven: включение jar не найден в публичном репозитории

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

то есть.

Мое приложение "A" зависит от jar "B", которого нет в публичном репозитории. Я, однако, хочу добавить "B" как зависимость от "A" , так что когда человек на другой стороне мира может проверить код и по-прежнему сможет построить "A"

Ответ 1

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

Или вы можете использовать область 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}, которое привязано к корню проекта.

Ответ 2

Если у вас есть родительский проект с модулем, который находится в этой ситуации (требуется зависимость не в репозитории), вы можете настроить родительский проект для использования плагина 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>

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

К моменту ввода сервисного модуля в фазу проверки банку будет доступно в локальном репозитории. Просто укажите его так, как вы установили groupid, артефакт и т.д. В родительском помпе. Например:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>

Ответ 3

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

из книги Maven:

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

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

Это очень просто, если вы используете диспетчер хранилища, такой как Nexus.

Ответ 4

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

Например.

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

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

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

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

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

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

Сторонняя банка также будет включена в пакет.

Ответ 5

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

  • Перейдите в Проводник проекта и щелкните правой кнопкой мыши по проекту.
  • Выберите параметр import.
  • Измените параметр maven и выберите Установить или развернуть артефакт в репозиторий maven и нажмите далее.
  • Браузер и выберите эту зависимость третьей стороны, используя Файл артефакта и введите деталь Идентификатор группы, Идентификатор артефакта и версия. используя файл POM.xml и нажмите завершить

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