Как добавить локальные файлы JAR в проект Maven?


1171

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


1
Привет @Praneel PIDIKITI, Можете ли вы изменить принятый ответ на тот, который набрал наибольшее количество голосов?
нуль

1
@nslntmnx Это не будет лучшим решением, так как все решения имеют недостатки stackoverflow.com/questions/364114/…
Пол Верест

Если ваши библиотеки иногда обновляются или расширяются, посмотрите этот ответ, и я хочу загрузить все JAR-файлы из папки проекта моей библиотеки libs с помощью maven для «pomified», чтобы избежать дополнительной папки репозитория и громоздких строк или install-fileскриптов cmd .
GeroldBroser восстанавливает Монику

Ответы:


699

Установите 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>: группа, в которой файл должен быть зарегистрирован, например, → com.google.code

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

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

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

Ссылка


7
В инструкции по установке моей сборки было все, кроме части generatePom. Это кажется решающим.
Джейсон Д

4
<путь к файлу> что это значит? Например, C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... или мы можем сделать $ {project.basedir} /src/main/resources/myJar.jar
Игорь Боофилс

17
Ответ не упоминает README или то, что банки принесены с собой. Тем не менее, если проект приносит баночки, тогда вы можете также поместить репо в проект, как упомянуто здесь stackoverflow.com/a/36602256/1000011, тогда вам не нужно читать README, так как проект будет работать так, как будто баночки были в Maven Central без каких-либо дополнительных ручных шагов.
Оптически,

8
@opticyclic Ваш комментарий нуждается в большем количестве голосов, или этот ответ необходимо отредактировать. Это рецепт катастрофы для новичков, которые не понимают, что установка в локальный репозиторий Maven не будет включать для всех остальных.
Майк С


1432

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

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

Обновить

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

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


49
Есть моменты, когда вы хотите специально протестировать, например, старую банку, и я думаю, что этот ответ хорошо подходит для этого. Это то, что мне было нужно. Проголосовал
Джон Локвуд

36
Как бы красиво и легко это не выглядело, у этого решения есть проблема, заключающаяся в том, что yourJar.jar не будет включен в WAR-файл для вашего приложения.
Матиас

40
Вышеупомянутое решение больше не работает, оно возвращает: «dependencies.dependency.systemPath для xx.jar не должно указывать на файлы в каталоге проекта». Это уже рассматривалось в stackoverflow.com/questions/10935135/…
sarah .ferguson

8
В этом ответе не так artifactIdи groupIdне наоборот?
theonlygusti

5
В соответствии с документом Maven ( maven.apache.org/guides/introduction/… ): Важное примечание: это помечено как устаревшее.
agassner

142

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

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

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

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

В файле pom в subproject1, расположенном по адресу ${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, который вы не можете опубликовать.


Локальный относительный каталог как
репозиторий

4
Если вы хотите сделать это в pom.xml, посетите baeldung.com/install-local-jar-with-maven
Кай Ван

@ Кай Ван Это решение работает лучше! возможно, вам следует добавить это в качестве ответа.
lockwobr

7
Так ${project.parent.basedir}как в настоящее время, кажется, ни к чему не приводит, я использовал ${project.basedir}/..и работал отлично.
The Impaler

1
Совет: пожалуйста, проверьте $ HOME / .m2 / settings.xml ml избегайте зеркального отображения «local-maven-repo» в settings / mirrors / mirror <mirrorOf>*</mirrorOf>.
btpka3

125

Создайте новую папку, скажем, 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]

16
Это единственный правильный ответ, так как он будет правильно создавать репозиторий при использовании deploy.
opticyclic

Будет ли этот подход работать, если код развернут с использованием сервера сборки CI? Похоже, что автоматизированные сборки не будут иметь доступа к зависимости.
Уоллес Ховери

2
@ user2748659 да, если на ваших серверах сборки CI эта папка local-maven-repoвключена (как дочерний в этом примере) в вашу исходную папку
Энтони О.

3
Этот ответ - то, что работало для меня. Для общего проекта наличие репозитория в каталоге проекта и добавление в систему управления версиями гарантирует, что у всех, кто проверяет проект, не будет отсутствующих зависимостей. Если у вас много зависимостей, то, вероятно, лучшим решением будет совместное удаленное репо, в противном случае хранение репо в каталоге проекта вполне подойдет.
Акварель

2
Обратите внимание, что для этого вам может понадобиться добавить -Dpackaging = jar. В противном случае вы получите «информация об артефакте неполная или недействительная: упаковка отсутствует».
J Вудчак

43

Я хотел бы такое решение - использовать 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 install не к initializeшагу, а к любому другому шагу, который вам нравится.


2
Это хорошо работает для меня, но только если я запускаю mvn initializeраньше mvn package: я не могу mvn initialize packageили он пытается загрузить JAR из центрального репозитория. Почему это? Я думал, что это запустит эти цели / фазы в порядке.
DavidS

1
На самом деле, они должны быть запущены в порядке. Взгляните на список жизненного цикла по умолчанию: maven.apache.org/guides/introduction/… Вы можете использовать еще один шаг для привязки.
Sphinks

2
Я перепробовал все методы, но в итоге мне пришлось прибегнуть к этому решению. Основная причина в том, что я хотел иметь возможность собирать пакеты локально в автономном режиме. Если бы я объявил это как зависимость с локально определенным репозиторием, это всегда рассматривалось как просто еще одно онлайн-репо, и сборка maven жаловалась на то, что артефакт не был оштрафован. Это решение отлично работает для каждого случая.
Mauli

2
Я думаю, что лучше использовать чистую фазу, потому что инициализация будет выполняться каждый раз, когда мы используем пакет mvn, когда это не нужно. Наконец, если нам нужно только сгенерировать jar / war, мы можем напрямую использовать пакет mvn clean .
Deoxyseia

« Также возможно связать jar install не для инициализации шага, а для любого другого шага, который вам нравится». Это не обязательно так. Если в репозитории еще нет зависимости и используется фаза, которая следует после фазы, которая разрешает зависимости (например compile), сборка завершится неудачно.
GeroldBroser восстанавливает Монику

29
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>


@GeroldBroser - хорошо. что мы можем использовать вместо этого?
MasterJoe2

2
@ MasterJoe2 Как уже упоминалось в принятом ответе, install:install-file артефакт для локального репозитория и использование его в качестве «нормальной» зависимости (с областью действия по умолчанию compile) или использование внутрикорпоративного решения для хранилища .
GeroldBroser восстанавливает Монику


14

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

<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: local:

<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>

Для локальных URL-адресов хранилища они могут быть относительными или должны быть абсолютными?
Dragas

@Dragas Я не пробовал, пожалуйста, дайте нам знать, если вы сделали.
fl0w

1
Да, очевидно, вы должны использовать <url>file:${basedir}</url>вместо этого базовый URL.
Dragas

11

Добавьте свой собственный локальный 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 следующим образом:

введите описание изображения здесь


Я получил ошибку Не удалось установить артефакт (доступ запрещен). Как я могу решить это? @Aurasphere
Рамза Рехман

1
@RamzahRehman попробуйте открыть командную строку с привилегиями admi, щелкнув ее правой кнопкой мыши и выбрав «Запуск от имени администратора»
Aurasphere

9

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

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

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


4
В конечном итоге перейти на Gradle. Это не работает Если локальный jar определен как зависимости, maven не будет запускать плагины до разрешения зависимостей, ручная установка неизбежна. нашел обсуждение этой ситуации: stackoverflow.com/questions/5951999/…
xinthink

7

Конечно, вы можете добавить банки в эту папку. Но, может быть, это не то, что вы хотите достичь ...

Если вам нужны эти jar для компиляции, проверьте следующий вопрос: Могу ли я добавить jar в maven 2 buildpath classpath без их установки?

Кроме того, прежде чем кто-либо предложит это, не используйте системную область.


6

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

  1. Создайте папку libs в вашем проекте
  2. Добавьте следующие строки в ваш файл pom.xml

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
  3. Откройте папку .m2 / repository и скопируйте структуру каталогов проекта, который вы хотите импортировать, в папку libs .

Например, предположим, что вы хотите импортировать зависимость

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

Просто зайдите в .m2 / repository, и вы увидите следующую папку

ком / MyCompany / MyProject / 1.2.3

Скопируйте все в свою папку libs (опять же, включая папки в .m2 / repository ), и все готово.


6

командная строка :

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

5

Важная часть в зависимости: $ {pom.basedir} (вместо просто $ {basedir})

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>

4

Я думаю, что лучшим решением для этой проблемы является использование maven-install-plugin для автоматической установки файлов во время установки. Вот как я настроил его для своего проекта.

Сначала добавьте путь (где вы храните локальные файлы .jars) в качестве свойства.

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

Затем под pluginsдобавить плагин, чтобы установить банки при компиляции.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

Наконец, в зависимости, вы можете добавить банки

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

Если вы настроите свой проект следующим образом, он продолжит сборку, даже если вы перенесете его на другой компьютер (если в нем есть все файлы jar по пути, указанному в свойстве local.sdk).

Для groupIdиспользования уникального имени просто чтобы убедиться, что нет конфликтов.

Теперь, когда вы mvn installили mvn testместные банки будут добавлены автоматически.


3

Предпочтительным способом было бы создать свой собственный удаленный репозиторий.

Смотрите здесь, чтобы узнать, как это сделать. Загляните в раздел « Загрузка в удаленный репозиторий ».


3

Я хочу поделиться кодом, где вы можете загрузить папку, полную банок. Это полезно, когда у провайдера нет общедоступного репозитория, и вам нужно добавить множество библиотек вручную. Я решил создать .bat вместо вызова напрямую maven, потому что это может быть из-за нехватки памяти. Он был подготовлен для среды Windows, но его легко адаптировать к ОС Linux:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

После запуска этого основного из любой IDE, запустите update_repo_maven.bat.


Ваш код String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))указывает на то, что будут поддерживаться только пользовательские файлы. Это не то, что нам нужно: вместо этого куча банок сторонних производителей. У вас есть предложения, как установить любую банку таким способом?
Джавадба

Я исправил ваш код: я поставил ответ внизу.
Джавадба

3

Это короткий синтаксис для более новых версий:

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

Это работает, когда JAR был построен Apache Maven - самый распространенный случай. Затем он будет содержать файл pom.xml в подпапке каталога META-INF, который будет читаться по умолчанию.

Источник: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


2

Также взгляните на ...

<scope>compile</scope>

Maven Зависимости . Это значение по умолчанию, но в некоторых случаях я обнаружил, что Maven явно устанавливает эту область для поиска локальных библиотек в локальном хранилище.


2

По какой-то причине в веб-приложении, которое я поддерживаю, ни решение Alireza Fattahi, ни решение JJ Roman не работали правильно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не включает банку внутри войны.

Единственный способ, которым мне удалось заставить это работать, состоял в том, чтобы поставить банку /src/main/webapp/WEB-INF/lib/и затем объединить это с решением Фаттахиса или Романа.


1

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

Хотя общий репозиторий - лучший ответ, если вы не можете сделать это по какой-то причине, то встраивание jar лучше, чем локальное репо. Локальное репо может вызвать много проблем, особенно с течением времени.


1
если вы добавляете jar-файлы в систему управления версиями, библиотеки всегда будут доступны вместе с источником. Нет источника, нет библиотек. С maven вместо этого источник может быть в порядке, но хранилище недоступно.
sarah.ferguson

@Frank ... есть идеи о том, как создать исполняемый файл jar, не включая внешние зависимости (файлы библиотеки)?
Сатиш Карутури

Для кого-то новичка в maven и кто ищет ответ на оригинальный вопрос, что означает «встраивание банки»?
cdock

1

В вашем локальном хранилище вы можете установить свой jar, выполнив команды

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

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



1
  1. установить MVN

Вы можете написать код ниже в командной строке или, если вы используете eclipse, встроенную в maven, щелкните правой кнопкой мыши по проекту -> Выполнить как -> запустить конфигурации ... -> в левой панели щелкните правой кнопкой мыши Maven Build -> новая конфигурация -> напишите код в Цели и в базовом каталоге: $ {project_loc: NameOfYourProject} -> Выполнить

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

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

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

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

<идентификатор артефакта>: имя артефакта для файла, например -> капча

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

<упаковка>: упаковка файла, например -> банка

2. После установки просто объявляет jar в pom.xml.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>

1

Шаг 1: Настройте maven-install-pluginс целью install-fileв вашемpom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
            <phase>clean</phase>
            <configuration>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.amazonservices.mws</groupId>
                <artifactId>mws-client</artifactId>
                <version>1.0</version>
                <file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Обязательно отредактируйте fileпуть в зависимости от вашего фактического пути к файлу (рекомендуется поместить эти внешние не maven файлы в какую-то папку, скажем lib, и поместить эту libпапку в ваш проект, чтобы использовать относительный путь для конкретного проекта и избегать добавления системы конкретный абсолютный путь.

Если у вас есть несколько внешних банок, просто повторите <execution>для других банок в том же maven-install-plugin.

Шаг 2: После того, как вы настроили maven-install-pluginкак показано выше в вашем pom.xmlфайле, вы должны использовать эти jar pom.xmlкак обычно:

    <dependency>
        <groupId>com.amazonservices.mws</groupId>
        <artifactId>mws-client</artifactId>
        <version>1.0</version>
    </dependency>

Обратите внимание, что maven-install-pluginтолько ваши внешние jar копируются в локальный .m2репозиторий maven. Вот и все. Эти файлы не включаются автоматически как maven-зависимости в ваш проект.

Это мелочь, но иногда ее легко пропустить.


0

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


0

В Apache Maven 3.5.4 мне пришлось добавить двойные кавычки. Без двойной цитаты это не сработало для меня.

пример: mvn install: install-file "-Dfile = расположение в файле jar" "-DgroupId = идентификатор группы" "-DartifactId = идентификатор артефакта" "-Dversion = версия" "-Dpackaging = тип пакета"


0
  1. Создайте локальный каталог репозитория Maven, корень вашего проекта должен выглядеть примерно так:
yourproject
+- pom.xml
+- src
  1. Добавьте стандартный каталог репозитория Maven с именем repo для группы com.example и версии 1.0:
yourproject
+- pom.xml
+- src
+- repo
  1. Развертывание артефакта В репо Maven может развернуть артефакт для вас, используя mvn deploy: deploy-file цель:
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. установите файл pom, соответствующий вашему jar-файлу, чтобы ваш проект мог найти jar-файл во время сборки maven из локального репозитория:
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. добавить репо в ваш файл pom:
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. добавьте зависимость в ваш pom:
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>

-2

ЭТОТ ОТВЕТ ТОЛЬКО ДЛЯ ПОТРЕБИТЕЛЕЙ:

Если вы используете Eclipse, поместите банку в lib /, щелкните правой кнопкой мыши по названию баночки и нажмите «добавить в путь сборки». Eclipse создаст «библиотеки с ссылками» и разместит банку для вас

Это решило импорт банки сразу в программе для меня


5
Это добавит запись в Eclipse .classpath, но ваша сборка maven mvn packageбудет расширена, как только вы начнете использовать эту зависимость, так как maven не имеет ее определения, и это должно быть только вpom.xml
Пол Верест

да, вы правы, пакет не будет включать местную банку. Но я ответил на вопрос, как добавить его в проект (по типу затмения).
Анандкумар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.