Знаток: добавьте зависимость к банке относительным путем

У меня есть собственная банка, которую я хочу добавить к своему англичанину как зависимость.

Но я не хочу добавлять его к репозиторию. Причина состоит в том, что я хочу свои обычные команды знатока такой как mvn compile, и т.д., для работы из поля. (Не требуя от разработчиков для добавления его к некоторому репозиторию собой).

Я хочу, чтобы банка была в стороннем lib в управлении исходным кодом и связалась с ним относительным путем из файла pom.xml.

Это может быть сделано? Как?

221
задан Bozho 9 February 2010 в 04:36
поделиться

3 ответа

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

Если вы действительно этого хотите (поймите, если вы не можете использовать корпоративный репозиторий), я бы посоветовал использовать локальный «файловый репозиторий» для проекта и не использовать a зависимость с областью видимости системы . Следует избегать применения системы в области видимости , такие зависимости не работают во многих ситуациях (например, при сборке), они вызывают больше проблем, чем преимуществ.

Вместо этого объявите репозиторий локальным для проекта:

<repositories>
  <repository>
    <id>my-local-repo</id>
    <url>file://${basedir}/my-repo</url>
  </repository>
</repositories>

Установите там вашу стороннюю библиотеку, используя install: install-file с параметром localRepositoryPath :

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \ 
                         -DartifactId=<myArtifactId> -Dversion=<myVersion> \
                         -Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>

] Обновление: Похоже, что install: install-file игнорирует localRepositoryPath при использовании версии 2.2 плагина. Однако он работает с версией плагина 2.3 и новее.Поэтому используйте полное имя подключаемого модуля, чтобы указать версию:

mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
                         -Dfile=<path-to-file> -DgroupId=<myGroup> \ 
                         -DartifactId=<myArtifactId> -Dversion=<myVersion> \
                         -Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>

maven-install-plugin documentation

Наконец, объявите его как любую другую зависимость (но без области system ):

<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>3rdparty</artifactId>
  <version>X.Y.Z</version>
</dependency>

Это IMHO лучшее решение, чем использование области system , поскольку ваша зависимость будет рассматриваться как хороший гражданин (например, она будет включена в сборку и так далее).

Теперь я должен упомянуть, что «правильный способ» справиться с этой ситуацией в корпоративной среде (возможно, здесь не так) - это использовать корпоративный репозиторий.

332
ответ дан 23 November 2019 в 04:05
поделиться

Используя область действия системы . ${basedir} - это каталог вашего pom.

<dependency>
    <artifactId>..</artifactId>
    <groupId>..</groupId>
    <scope>system</scope>
    <systemPath>${basedir}/lib/dependency.jar</systemPath>
</dependency>

Однако желательно установить банку в репозиторий, а не коммитировать ее в SCM - в конце концов, это то, что maven пытается устранить.

121
ответ дан 23 November 2019 в 04:05
поделиться

Ранее я уже писал о шаблоне для этого.

Он очень похож на решение, предложенное Pascal, хотя он перемещает все такие зависимости в специальный модуль репозитория, так что вам не придется повторять это везде, где используется зависимость, если это многомодульная сборка.

9
ответ дан 23 November 2019 в 04:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: