Як додати локальні файли jar до проекту Maven?


1171

Як додати локальні файли jar (ще не входять у сховище Maven) безпосередньо в бібліотечні джерела мого проекту?


1
Привіт @Praneel PIDIKITI, Чи можете ви, будь ласка, змінити прийняту відповідь на ту, що отримала найбільше голосів?
— null

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

Якщо ваші лінзи оновлюються чи розширюються при нагоді, дивіться цю відповідь на Я хочу завантажувати всі JAR-файли з моєї папки проекту libs з maven на «пом’якшений» спосіб, і таким чином уникати додаткової папки repo та громіздких cmd-ліній чи install-fileсценаріїв.
— ГерольдБрозер повертає Моніку

Відповіді:


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
В інструкціях до встановлення на моїй збірці було все, крім частини generatorPom. Це здається вирішальним.
— Джейсон Д

4
<path-to-file> що це означає? Як і C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... чи ми можемо зробити $ {project.basedir} /src/main/resources/myJar.jar
— Ігор Beaufils

17
Відповідь не згадує README або про те, що банки привозять із собою. Однак якщо проект приносить банки, тоді ви також можете помістити репо в проект, як згадується тут, stackoverflow.com/a/36602256/1000011, тоді вам не потрібно README, оскільки проект просто працюватиме так, як ніби банки були в центральній станції Maven без зайвих ручних кроків.
— оптициклічний

8
@opticyclic ваш коментар потребує більше оновлень, або цю відповідь потрібно відредагувати. Це рецепт катастрофи для новачків, які не усвідомлюють, що встановлення на місцевий ревіз Maven не стосується всіх інших.
— Майк S


1427

Ви можете додавати локальні залежності безпосередньо (як це було зазначено в проекті 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://isissue.apache.org/jira/browse/MNG-6523 (Ви можете брати участь і описати, чому ця функція корисна в деяких випадках). Я сподіваюся, що ця функція залишається там!

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


49
Бувають випадки, коли ви хочете спеціально протестувати стару банку, наприклад, і я вважаю, що ця відповідь добре підходить для цього. Мені це було потрібно. Upvoted
— Джон Локвуд

36
Настільки ж приємно і просто, як виглядає, це рішення має проблему, що yourJar.jar не буде включений у файл WAR для вашої програми.
— Маттіас

40
Наведене вище рішення більше не працює, воно повертається: "'зависимостей.dependency.systemPath' для xx.jar не повинно вказувати на файли в каталозі проекту" Це вже було розроблено в stackoverflow.com/questions/10935135/…
— sarah .ferguson

8
У цій відповіді, чи не так artifactIdі groupIdнеправильно?
— theonlygusti

5
Відповідно до документа Maven ( maven.apache.org/guides/introduction/… ): Важлива примітка: Це позначено як застаріле.
— посередник

142

По-перше, я хотів би віддати подяку за цю відповідь анонімному користувачу Stack Overflow - я майже впевнений, що раніше я бачив подібну відповідь - але зараз я не можу її знайти.

Найкращим варіантом наявності локальних файлів JAR як залежність є створення локального сховища Maven. Таке сховище - це не що інше, як правильна структура каталогів з пом-файлами в ньому.

Для мого прикладу: у мене головний проект про ${master_project}місцезнаходження та підпроект1 увімкнено ${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>

Залежність може бути визначена як для будь-якого іншого сховища. Це робить ваш сховище пам’яті незалежним. Наприклад, після того, як потрібний 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, який ви не можете опублікувати.


Місцевий відносний каталог як maven repo ... Допомагав дуже
— sura2k

4
Якщо ви хочете зробити це у pom.xml, перегляньте baeldung.com/install-local-jar-with-maven
— Kai Wang

@Kai Wang Це рішення працює набагато краще! ви можете, можливо, додати це як відповідь.
— lockwobr

7
Оскільки ${project.parent.basedir}, схоже, ні до чого не вирішується, я використовував ${project.basedir}/..і працював досконало.
— The Impaler

1
Порада: перевірте $ HOME / .m2 / settings.xml , уникайте, щоб "local-maven-repo" відображався налаштуваннями / дзеркалами / дзеркалом <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>

Потім для кожної зовнішньої банки, яку ви хочете встановити, перейдіть до кореня проекту та виконайте:

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
Це єдина правильна відповідь тут, оскільки вона створить ваше репо правильно під час використання розгортання.
— оптициклічний

Чи працює цей підхід, якщо код розгорнуто за допомогою сервера збирання CI? Схоже, автоматизовані збірки не мали б доступу до залежності.
— Wallace Howery

2
@ user2748659 так, якщо на ваших серверах побудови CI папка local-maven-repoвключена (як дитина в цьому прикладі) у вашу вихідну папку
— Ентоні О.

3
Ця відповідь - це те, що працювало для мене. Для спільного проекту, додавши репо в каталог проектів і додавши до контролю версій, гарантується, що кожен, хто перевіряє проект, не матиме відсутніх залежностей. Якщо у вас багато залежностей, то спільне віддалене РЕПО, мабуть, краще рішення, інакше зберігати репо в каталозі проекту цілком чудово.
— Акварель

2
Зауважте, що для цього вам може знадобитися додати -Dpackaging = jar. В іншому випадку ви отримаєте "Інформація про артефакт неповна або недійсна: упаковка відсутня".
— J Woodchuck

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і банку буде встановлена ​​в місцевому maven repo. Тепер ця баночка доступна під час будь-якого кроку Maven на цій машині (не забудьте включити цю залежність як будь-яку іншу залежність Maven у пом із <dependency></dependency>тегом). Також можна прив’язати установку jar не до initializeкроку, а будь-якого іншого кроку, який вам подобається.


2
Це добре працює для мене, але лише в тому випадку, якщо я запускаюсь mvn initializeраніше mvn package: я не можу mvn initialize packageабо ще намагається завантажити JAR з центрального репо. Чому це? Я думав, що це буде виконувати цілі / фази в порядку.
— DavidS

1
Насправді їх слід запускати по порядку. Погляньте на список життєвого циклу за замовчуванням: maven.apache.org/guides/introduction/… Ви можете скористатися ще одним кроком для прив’язки.
— сфінкси

2
Я намагався кожен метод, але врешті-решт мені довелося вдатися до цього рішення. Основна причина полягає в тому, що я хотів мати можливість локально створювати пакунки в автономному режимі. Якщо я заявив про це як залежність від локально визначеного сховища, це завжди розглядалося як лише чергове репортаж в Інтернеті, і збірка Maven скаржилася на те, що артефакт не оштрафував. Це рішення чудово працює для кожного випадку.
— Маулі

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

" Також можна зв'язати установку jar не ініціалізувати крок, але будь-який інший крок, який вам подобається. " Не обов'язково відповідає дійсності. Якщо залежність ще не знаходиться в репо, і використовується фаза, що настає після фази, яка вирішує залежності (наприклад compile), збірка не вийде.
— ГерольдБрозер повертає Моніку

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) або використовуйте рішення для сховища в проекті .
— ГерольдБрозер повертає Моніку


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) або якщо у вас немає жодного з них або не хочете встановити локальну систему структурований архів та налаштування "сховища" у вашому 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>

для цього можливий також відносний шлях, використовуючи змінну базиру:

<url>file:${basedir}</url>

Вони можуть бути відносними для місцевих URL-адрес сховища чи повинні бути абсолютними?
— Драгас

@Dragas Я не намагався, будь ласка, повідомте нас, якщо ви це зробили.
— fl0w

1
Так, мабуть, вам потрібно використовувати <url>file:${basedir}</url>як базовий URL.
— Драгас

11

Додайте свій власний локальний JAR у файл POM та використовуйте його у Maven build.

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
— Ramzah Rehman

1
@RamzahRehman спробуйте відкрити командний рядок із привілеями адміністрування, клацнувши правою кнопкою миші та виберіть "Запустити як адміністратор"
— Aurasphere

9

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

Ще один приємний спосіб, який я нещодавно бачив, - це включити модуль встановлення Maven у свій життєвий цикл збірки: Ви заявляєте в POM, щоб встановити файли в локальне сховище. Це невеликий, але невеликий накладні витрати і жодного ручного кроку не передбачається.

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


4
У кінцевому підсумку з переходом на gradle. Це не працює Якщо локальний jar визначений як залежність, maven не виконає плагіни до усунення залежностей, ручна установка неминуча. знайшов disscussion про цю ситуацію: stackoverflow.com/questions/5951999 / ...
— xinthink

7

Звичайно, ви можете додати банки до цієї папки. Але, можливо, це не те, чого ви хочете досягти ...

Якщо вам потрібні ці банки для компіляції, перевірте це пов'язане питання: Чи можна додати банки до Maven 2 build 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 / сховище, і ви побачите наступну папку

com / mycompany / myproject / 1.2.3

Скопіюйте все у свою папку libs (знову ж таки, папки під .m2 / сховище ), і ви закінчите.


6

командний рядок :

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

5

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

<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 для автоматичного встановлення файлів у час установки. Ось як я створив це для свого проекту.

Спочатку додайте шлях (де ви зберігаєте місцеві .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"))Здається, ваш код вказує, що підтримуватимуться лише спеціальні банки. Це не те, що нам потрібно: натомість купу сторонніх банок. Чи є у вас пропозиції, як встановити будь-яку банку таким чином?
— javadba

Я виправив ваш код: я ставлю відповідь внизу.
— javadba

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

Чомусь у веб-додатку, якому я надаю підтримку, ні рішення Алірези Фаттахі, ні рішення Дж. Дж. Романа не працювали коректно. В обох випадках компіляція йде нормально (вона бачить банку), але упаковка не вміщує банку всередині війни.

Єдиний спосіб, коли мені вдалося змусити його працювати, - поставити банку /src/main/webapp/WEB-INF/lib/і потім поєднати її з рішенням Фаттахіса або Романа.


1

Зауважте, що НЕ обов'язково корисно використовувати місцеве репо. Якщо цей проект ділиться з іншими, тоді всі інші матимуть проблеми та питання, коли він не працює, і баночка не буде доступною навіть у вашій системі управління джерелами!

Хоча спільне репо - найкраща відповідь, якщо ви не можете цього зробити, то вбудовувати банку краще, ніж локальне репо. Вміст репо лише для локальних мереж може спричинити багато проблем, особливо з часом.


1
якщо додати банки в систему управління джерелами, бібліотеки завжди будуть доступні разом із джерелом. Немає джерела, немає бібліотек. З Maven замість джерела може бути нормально, але сховище недоступне.
— sarah.ferguson

@Frank ... будь-яка ідея про те, як створити виконуваний jar без включення зовнішніх залежностей (бібліотечні файли)?
— Satish Karuturi

Для когось, хто не знайомий і шукає відповідь на оригінальне запитання, що означає "вбудовування баночки"?
— cdock

1

У вашому локальному сховищі ви можете встановити свою банку, видаючи команди

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

Перейдіть за цим корисним посиланням, щоб зробити те саме на веб-сайті mkyoung. Ви також можете перевірити Maven guide для того ж


1

Щоб встановити сторонню банку, будь ласка, зателефонуйте команді, як показано нижче

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path

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

<group-id>: група, під якою файл повинен бути зареєстрований, наприклад -> com.google.code

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

<версія>: версія файлу, наприклад -> 2.3

<упаковка>: упаковка файлу, наприклад, - jar

2. Після встановлення просто оголошує банку в 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файлі, ви повинні використовувати ці банки pom.xmlяк у звичайному:

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

Зауважте, що maven-install-pluginваші зовнішні банки копіюються лише в ваш місцевий.m2 сховище 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. Розгорніть артефакт у Repo, Maven може розгорнути артефакт для вас, використовуючи mvn, розгорнутий-файл-мета:
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. встановіть файл Pom, що відповідає вашій банці, щоб ваш проект міг знайти банку під час складання Maven з локального репо:
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. додати репо в свій файл пам’яті:
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. додайте залежність у своєму пом:
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>

-2

ЦЕ ВІДПОВІДЬ ТОЛЬКО для споживачів ECLIPSE:

Якщо ви використовуєте Eclipse, помістіть банку в lib /, клацніть правою кнопкою миші назву банку та натисніть "Додати до шляху складання". Eclipse створить "бібліотеки, на які посилаються", і розмістить вам банку

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


5
Це додасть запису до Eclipse .classpath, але ваша mvn packageкоманда Maven буде брокером, як тільки ви почнете використовувати цю залежність, оскільки maven не має цього визначення, і це має бути лише вpom.xml
— Paul Verest

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