Добавить зависимость в Maven

134

Как мне взять jar-файл, который у меня есть, и добавить его в систему зависимостей в maven 2? Я буду поддерживать эту зависимость, и моему коду нужен этот jar в пути к классам, чтобы он компилировался.

Милхаус
источник

Ответы:

139

Вам придется сделать это в два этапа:

1. Дайте вашему JAR идентификатор группы, artifactId и версию и добавьте их в свой репозиторий.

Если у вас нет внутреннего репозитория, и вы просто пытаетесь добавить свой JAR в свой локальный репозиторий, вы можете установить его следующим образом, используя любой произвольный идентификатор группы / artifactIds:

mvn install:install-file -DgroupId=com.stackoverflow... -DartifactId=yourartifactid... -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/jarfile

Вы также можете развернуть его в своем внутреннем репозитории, если он у вас есть, и хотите сделать его доступным для других разработчиков в вашей организации. Я просто использую веб-интерфейс моего репозитория для добавления артефактов, но вы должны быть в состоянии сделать то же самое, используя mvn deploy:deploy-file ....

2. Обновите зависимые проекты для ссылки на этот JAR.

Затем обновите зависимость в pom.xml проектов, использующих JAR, добавив в элемент следующее:

<dependencies>
    ...
    <dependency>
        <groupId>com.stackoverflow...</groupId>
        <artifactId>artifactId...</artifactId>
        <version>1.0</version>
    </dependency>
    ...
</dependencies>
Джек Леу
источник
3
Можете ли вы добавить более подробную информацию о развертывании? У нас есть внутренний репозиторий, и я хочу развернуть мой локальный установленный файл jar в этом репозитории, чтобы другие разработчики и наш сервер сборки также получили jar.
Kieveli
Этот ответ должен получить все лайки! Я использовал это, чтобы успешно добавить зависимости для моих проектов maven в Google App Engine и Heroku.
Leo C Han
93

Вы также можете указать зависимость не в репозитории Maven. Может быть полезно, когда не существует центрального репозитория maven для вашей команды или если у вас есть CI- сервер

    <dependency>
        <groupId>com.stackoverflow</groupId>
        <artifactId>commons-utils</artifactId>
        <version>1.3</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/commons-utils.jar</systemPath>
    </dependency>
Фредерик Морен
источник
4
Могу ли я зависеть от другого файла POM вместо банки?
Jayen
45

На самом деле, изучая это, я думаю, что все эти ответы неверны. Ваш вопрос вводит в заблуждение из-за нашего уровня понимания maven. И я говорю наш, потому что я только знакомлюсь с maven.

Если Eclipseвы хотите добавить файл JAR в свой проект, обычно вы загружаете JAR вручную, а затем помещаете его в каталог lib . С Maven, вы не делаете это таким образом. Вот что вы делаете:

  • Перейти в mvnrepository
  • Найдите библиотеку, которую хотите добавить
  • Скопируйте dependencyзаявление в свойpom.xml
  • восстановить с помощью mvn

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

Kieveli
источник
5
Я использую Spring Tool Suite (построен на Eclipse). После шагов 1 и 2 в приведенном выше решении: 1. Откройте pom.xml в редакторе STS, нажмите вкладку «Зависимости» внизу 2. Нажмите «Добавить» в группе зависимостей 3. Скопируйте / вставьте информацию о зависимостях вкладки «Maven» из окна браузера ( groupId, artifactId, version) в соответствующие поля во всплывающем окне «Выбор зависимости» в STS 4. Нажмите OK. 5. Сохраните pom.xml. После сохранения папка maven на жестком диске и параметр зависимости maven в STS обновляются в течение нескольких секунд. Вы можете редактировать XML-файл напрямую, но использование этого инструмента поможет избежать проблем с форматом XML.
Крис Р
2
Это действительно предпочтительный способ сделать что-то, но есть ситуации, когда вы не можете этого сделать (например, проприетарный jar не в mvnrepository). В этом случае вам нужен способ добавить его «вручную», и в этом случае другой ответ будет иметь решение.
Thunderforge
Также возможно, что заданный вопрос был менее начальным. Я вставил это для людей, которые хотят что-то сделать без правильной формулировки, которая приходит из-за времени, потраченного на работу с Maven. (Как я был в то время)
Kieveli
ПОЦЕЛУЙ Спасибо, я читал, что это эквивалент C # Nuget в Java, но я пытался выяснить, какую кнопку нажимать или cmd для запуска. Не совсем 1: 1, но делает работу.
Терренс
Как перестроить проект в Maven в IntelleJ?
Ирфан Насим
14

Я бы сделал это:

  1. добавьте зависимость, как вам нравится в вашем pom:

    <dependency>
            <groupId>com.stackoverflow...</groupId>
            <artifactId>artifactId...</artifactId>
            <version>1.0</version>
    </dependency>

  2. запустить mvn installего попытается скачать банку и потерпеть неудачу. В процессе, он даст вам полную команду установки jar с сообщением об ошибке. Скопируйте эту команду и запустите ее! просто да ?!

user40032
источник
3

Я предполагаю, что вы спрашиваете, как отправить зависимость в «известный репозиторий», а не просто спрашиваете, как обновить POM.

Если да, то это то, что вы хотите прочитать.

И для любого, кто хочет настроить внутренний сервер репозитория, посмотрите здесь (половина проблемы с использованием Maven 2 - это поиск документов)

kdgregory
источник
Я хотел бы сохранить зависимость самостоятельно. Это внутренняя библиотека.
Milhous