Загрузка всех зависимостей maven в каталог НЕ в репозитории?

Я начал преобразовывать свой проект в maven, потому что мне нужно было использовать библиотеку, которая была распространена в двоичной форме только по maven, но после того, как я слишком долго бился головой о стену, я решил перестать причинять себе вред и просто использовать Муравей. Я хотел бы, чтобы maven загрузил jar-файл и все его транзитивные зависимости в каталог по моему выбору, чтобы я мог просто проверить их в своем SCM, поскольку обычно мне нравится, и снова быть блаженным разработчиком.
Любые идеи, как сделать это легко?


person chubbsondubs    schedule 26.10.2011    source источник
comment
Подумайте об использовании Ivy и получите необходимое вам транзитивное управление зависимостями с помощью Ant, которому вы доверяете. Или попробуйте использовать структуру каталогов Maven.   -  person Dave Newton    schedule 26.10.2011
comment
Вы пробовали Ivy?   -  person Tomasz Nurkiewicz    schedule 26.10.2011
comment
Нет, но я потратил все свое терпение на переключение на этом этапе. Может быть в следующий раз. Я хочу вернуться к кодированию. Можно ли это сделать с помощью maven?   -  person chubbsondubs    schedule 27.10.2011
comment


Ответы (5)


maven dependency plugin потенциально может решить вашу проблему. .

Если у вас есть pom со всеми указанными зависимостями вашего проекта, все, что вам нужно сделать, это запустить

mvn dependency:copy-dependencies

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

Добавление ответа Густаво снизу: Чтобы загрузить источники зависимости, вы можете использовать

mvn dependency:copy-dependencies -Dclassifier=sources

(через документ подключаемого модуля зависимостей Apache Maven ).

person Raghuram    schedule 27.10.2011
comment
но что, если я хочу скопировать все зависимости в свое локальное репо? Для этого он предназначен? Зачем копировать, если он, возможно, уже находится в локальном репо. Во всяком случае, это местное. - person ses; 09.08.2013
comment
@ses Стандартная сборка maven (например, компиляция, тест, пакет, установка и т. д.; не уверен в проверке) уже по умолчанию копирует все зависимости в ваше локальное репо. Это не для этого. Вместо этого это для ситуаций, когда вам по какой-либо причине нужны зависимости вашего приложения. Я использую его прямо сейчас, чтобы проверить зависимые библиотеки на предмет избыточных определений API (например, некоторые библиотеки будут включать API Javax, которые могут конфликтовать с другими версиями того же API), но это также хорошо, если вашему приложению нужны его зависимости, упакованные с ним. для распространения или что-то еще. - person Spanky Quigman; 27.08.2013
comment
@Raghuram Технически вы получаете все (разрешенные) артефакты в target / dependencies. Кроме того, существует потенциальная проблема конфликта имен, поскольку координата groupId зависимости игнорируется. Другими словами, dependency: copy-dependencies не сохраняет структуру макета. - person wh81752; 25.10.2014
comment
@whaefelinger. Вам просто нужно установить useRepositoryLayout кому: true - person Raghuram; 27.10.2014
comment
Зависимость @Raghuram: зависимости от копирования работают для простых jar-файлов. Он скопировал некоторые транзитивные зависимости; не мог понять, почему некоторые были исключены из уравнения. Кроме того, POM и родительские POM копируются, но без сохранения структуры макета; то же самое верно и для копирования файлов из исходных файлов. - person wh81752; 31.10.2014
comment
Веб-сайт предлагает вам добавить <build>....</build> в ваш файл pom.xml, но это было проигнорировано в моем проекте при экспорте, поэтому не уверен, действительно ли вам нужно это делать! Однако вам необходимо установить Maven (технически: загрузите zip, разархивируйте и добавьте папку bin в PATH), если вы используете Eclipse, потому что, хотя с ним идут новые версии, это просто тип плагина, а не полная установка, которая вам нужно запустить команды mvn в cmd! Затем просто запустите команду в папке с файлом pom.xml, и загруженные jar-файлы будут в его подпапке. - person Neph; 04.09.2019
comment
@Raghuram спасибо за ваш ответ. Как я могу загрузить зависимости в структуре папок maven (например, выпуск org.springframework.spring-aop 5.1.2), следует загрузить что-то вроде target / dependencies / org / springframework / spring-aop / 5.1.2.RELEASE / (actual_jar) . Таким образом, когда я делюсь файлом dependencies.zip с другим участником, он / она может устанавливать jar-файлы с помощью maven install в репозиторий mavenLocal, и приложение может быть легко создано. поделитесь своими мыслями. - person harshit2811; 09.12.2020

Я наконец понял, как использовать 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

Добавить jar-файлы в java-проект по пути сборки -> настроить путь сборки -> библиотеки -> добавить файлы JAR ..

person Baked Inhalf    schedule 17.01.2018
comment
Не обязательно должен быть проект затмения. Я открыл файл jar в Java Decompiler и скопировал pom.xml в пустую папку. Я вызвал mvn dependency:copy-dependencies, как вы описали, из этой папки, и все зависимые файлы jar были аккуратно скопированы в одну папку. - person Bernhard Döbler; 19.06.2018

Основываясь на ответе @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.

person user    schedule 07.05.2017
comment
Где набрать команду mvn? Щелкните правой кнопкой мыши maven-project- ›Maven -› .. ?? - person Baked Inhalf; 17.01.2018
comment
В командной строке терминала в папке, где находится файл pom.xml. - person user; 17.01.2018
comment
Не сработало. Я думаю, что Maven устанавливается только как плагин. Мне также пришлось вручную загрузить Maven. Тогда mvn dependency:copy-dependencies сработало! - person Baked Inhalf; 17.01.2018

Я нашел следующую команду

mvn dependency:copy-dependencies -Dclassifier=sources

здесь maven.apache.org

person Gustavo    schedule 26.05.2017

Пожалуйста, проверьте, есть ли у вас в каталоге ${MAVEN_HOME}/conf файлы конфигурации, например settings.xml. Эти файлы переопределяют настройки из папки .m2, и из-за этого папка репозитория из .m2 может быть не видна или удалена.

person MagGGG    schedule 29.08.2017