Завантаження всіх основних залежностей до каталогу НЕ у сховищі?


128

Я почав перетворювати свій проект на Maven, тому що мені потрібно було використовувати бібліотеку, яка поширювалась у двійковій формі лише на Maven, але після того, як занадто довго стукала головою об стіну по ній, я вирішила перестати шкодити собі і просто використовувати Мураха. Мені хотілося б просто завантажити Maven і всі його перехідні залежності в каталог, який я вибрав, щоб я міг просто перевірити їх у своєму SCM, як мені зазвичай подобається, і знову стати блаженним розробником.
Будь-які ідеї, як це зробити легко?


2
Подумайте про використання Ivy та отримайте необхідне управління транзитивною залежністю, з мурахом, якому ви довіряєте. Або кусайте кулю і використовуйте структуру каталогу Maven.
Дейв Ньютон

Ви пробували Айві ?
Томаш Нуркевич

5
Ні, але я всю свою терпіння витратив на переключення в цей момент. Можливо, наступного разу. Я хочу повернутися до кодування. Чи можна це зробити з maven?
чубчики

Відповіді:


261

Плагін Maven залежності потенційно може вирішити вашу проблему.

Якщо у вас є pomвсі вказані вами залежності від проекту, все, що вам потрібно зробити, це запустити

mvn dependency:copy-dependencies

і ви знайдете target/dependenciesпапку, наповнену усіма залежностями, включаючи перехідні.

Додавши відповідь Густаво знизу : Щоб завантажити джерела залежності , можна скористатися

mvn dependency:copy-dependencies -Dclassifier=sources

(через плагін Apache Maven Dependency Doc ).


1
Thx @ Raghuram, я шукаю це протягом століть.
eskalera

але що робити, якщо я хочу скопіювати всі залежності на своє місцеве репо? Це він повинен бути використаний? Навіщо робити копію, якщо вона, можливо, вже є в місцевому репо. Це все одно локально.
SES

1
@ses Стандартна збірка maven (наприклад, компілювання, тест, упаковка, установка тощо; не впевнений у валідації) вже за замовчуванням копіює всі залежності у ваше місцеве репо. Це не для цього. Натомість це для ситуацій, коли вам потрібні залежності вашого додатка з будь-якої причини. Я зараз використовую його для перевірки залежних бібліотек на предмет надмірних визначень API (наприклад, деякі бібліотеки включатимуть API Javax, які можуть суперечити іншим версіям того ж API), але це також добре, якщо вашому додатку потрібні його залежні пакунки. на розповсюдження, або що завгодно.
Spanky Quigman

1
+1 за чітку, коротку та корисну відповідь. Я просто пройшов той самий танець Мейвена, що і ОП, і просто хотів знайти залежність файлів JAR. Дякую! Я б хотів, щоб я міг +10
Брендон

@Raghuram Технічно ви закінчуєте всі (вирішені) артефакти в "цілі / залежності". Крім того, існує потенційна проблема зіткнень імен, оскільки "groupId" координата залежності ігнорується. Іншими словами, "залежність: копіювальна залежність" не зберігає структуру макета.
whaefelinger

8

На основі відповіді @Raghuram , я знаходжу підручник щодо Копіювання залежностей проекту , Просто:

  1. Відкрийте pom.xmlфайл свого проекту та знайдіть це:

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
  2. Чим замінити на <plugins> ... </plugins>:

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  3. І викликати maven в командному рядку mvn dependency:copy-dependencies

Після його завершення він створить папку target/dependencyв усіх jarзалежностях від поточного каталогу, де pom.xmlживе.


Де я набираю команду "mvn"? Клацніть правою кнопкою миші maven-project-> Maven -> .. ??
Запечений Inhalf

У командному рядку терміналу в папці, де знаходиться pom.xmlфайл.
користувач

1
Не працювало. Я думаю, що Maven встановлений лише як плагін. Мені довелося також завантажити вручну Maven. Тоді mvn dependency:copy-dependenciesпрацювали!
Запечений Інгальф

8

Я нарешті придумав, як користуватися Maven. Зсередини Eclipse створіть новий проект Maven.

Завантажте Maven, витягніть архів, додайте /binпапку в шлях.

Перевірте встановлення з командного рядка, запустивши mvn -v(надрукує версію та шлях встановлення Java)

Перейдіть до кореневої папки проекту (де pom.xmlзнаходиться) та запустіть:

mvn dependency:copy-dependencies

Всі jar-файли завантажуються в /target/dependency.

Щоб встановити інший вихідний каталог:

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

Тепер можна повторно використовувати цей проект Maven для всіх завантажень залежностей, змінивши pom.xml

Додайте банки до проекту java шляхом контуру збирання -> налаштувати шлях збірки -> бібліотеки -> додати JAR.


1
Це не обов'язково має бути проектом затемнення. Я відкрив jar-файл у Java Decompiler і скопіював pom.xml у порожню папку. Я зателефонував, mvn dependency:copy-dependenciesяк ви описали з цієї папки, і отримав всі залежні файли jar, добре скопійовані в одну папку.
Бернхард Дьоблер


2

Перевірте, чи є у вас такі файли конфігурацій, як у ${MAVEN_HOME}/confкаталозі settings.xml. Ці файли переосмислюють налаштування з .m2папки, і тому папка сховища .m2може не бути видимою або відкинутою.

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