Как добавить локальные файлы JAR в проект Maven? - PullRequest
966 голосов
/ 10 февраля 2011

Как добавить локальные файлы JAR (еще не являющиеся частью репозитория Maven) непосредственно в исходные файлы моего проекта?

Ответы [ 27 ]

1256 голосов
/ 10 марта 2014

Вы можете добавить локальные зависимости напрямую (как упомянуто в build maven project с включенными в него библиотеками ), например:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

Обновление

В новых выпусках эта функция помечена как устаревшая, но все еще работает и еще не удалена (вы просто видите предупреждение в журнале во время запуска maven). В maven group поднимается вопрос об этом https://issues.apache.org/jira/browse/MNG-6523 (Вы можете принять участие и описать, почему эта функция полезна в некоторых случаях). Я надеюсь, что эта функция остается там!

Если вы спрашиваете меня, пока функция не удалена, я использую это для создания зависимости только от одного файла непослушного jar в моем проекте, который не помещается репозиторий. Если эта функция будет удалена, то здесь есть много хороших ответов, которые я могу выбрать позже!

548 голосов
/ 10 февраля 2011

Установите JAR в ваш локальный репозиторий Maven следующим образом:

mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

Где каждый относится к:

<path-to-file>: путь к файлу для загрузки, например: → c:\kaptcha-2.3.jar

<group-id>: группа, в которой файл должен быть зарегистрирован под e.g → com.google.code

<artifact-id>: имя артефакта для файла, например: → kaptcha

<version>: версия файла, например, → 2.3

<packaging>: упаковка файла, например → jar

Ссылка

113 голосов
/ 27 февраля 2015

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

Лучшим вариантом для использования локальных файлов JAR в качестве зависимости является создание локального репозитория Maven.Такой репозиторий - не что иное, как правильная структура каталогов с файлами pom в нем.

Для моего примера: у меня есть мастер-проект в ${master_project} location, а subproject1 в ${master_project}/${subproject1}.

Затем я создаю репозиторий Maven в: ${master_project}/local-maven-repo.

В файле pom в подпроекте1, расположенном по адресу ${master_project}/${subproject1}/pom.xml, необходимо указать хранилище, в котором в качестве параметра URL будет указан путь к файлу:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

Зависимость можно указать, как и для любого другого хранилища.Это делает ваш репозиторий POM независимым.Например, как только требуемый JAR будет доступен в Maven Central, вам просто нужно удалить его из локального репо, и он будет извлечен из репо по умолчанию.

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

Последнее, но не менее важное, это добавление файла JAR в локальный репозиторий с помощью ключа -DlocalRepositoryPath, например:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

После установки файла JAR вашРепозиторий Maven может быть передан в репозиторий кода, и вся установка не зависит от системы.( Рабочий пример в GitHub ).

Я согласен, что использование JAR-файлов для репозитория исходного кода не является хорошей практикой, но в реальной жизни быстрые и грязные решения иногда лучше, чем полноевзорванный репозиторий Nexus для размещения одного JAR, который вы не можете опубликовать.

99 голосов
/ 13 апреля 2016

Создайте новую папку, скажем local-maven-repo в корне вашего проекта Maven.

Просто добавьте локальное хранилище внутри вашего <project> вашего pom.xml:

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

Затем для каждого внешнего jar, который вы хотите установить, перейдите в корень вашего проекта и выполните:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
28 голосов
/ 13 июля 2016

Мне бы хотелось такое решение - используйте maven-install-plugin в файле pom:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>lib/yourJar.jar</file>
                        <groupId>com.somegroup.id</groupId>
                        <artifactId>artefact-id</artifactId>
                        <version>x.y.z</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
            </executions>
        </plugin>

В этом случае вы можете выполнить mvn initialize, и jar будет установлен в локальном репозитории Maven. Теперь этот jar-файл доступен во время любого шага maven на этом компьютере (не забудьте включить эту зависимость как любую другую зависимость maven в pom с тегом <dependency></dependency>) Также можно привязать установку jar не к шагу initialize, а к любому другому шагу, который вам нравится.

25 голосов
/ 09 января 2016
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>
14 голосов
/ 10 февраля 2011

Да, вы можете иметь, но это не очень хорошая идея.

Вместо этого установите все эти банки в репозитории Maven

См. Также

8 голосов
/ 02 августа 2018

Очень быстрый и грязный способ - указать на локальный файл:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

Однако, это будет жить только на вашем компьютере (очевидно), для общего доступа обычно имеет смысл использовать надлежащий архив m2 (nexus / artifactory) или если у вас его нет или вы не хотите его настраивать локальный структурированный архив maven и настройте «хранилище» в вашем pom: местный:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

удаленный:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

для этого также возможен относительный путь с помощью переменной basedir:

<url>file:${basedir}</url>
8 голосов
/ 10 февраля 2011

Один из способов - загрузить его в свой собственный менеджер репозитория Maven (например, Nexus). В любом случае, хорошо иметь собственного менеджера хранилища.

Еще один приятный способ, который я недавно видел, - это включить плагин установки Maven в жизненный цикл сборки: вы объявляете в POM для установки файлов в локальный репозиторий. Это небольшие, но небольшие накладные расходы, не требующие ручного шага.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

8 голосов
/ 05 июля 2017

Добавьте свой собственный локальный JAR-файл в файл POM и используйте его в сборке Maven.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

Например:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

Затем добавьте его в POM следующим образом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...