Я начал конвертировать свой проект в maven, потому что мне нужно было использовать библиотеку, которая была распределена в двоичной форме только через maven, но после долгого удара головой о стену на ней я решил перестать болеть и просто используйте Ant. Я бы хотел, чтобы maven загрузил jar и все его транзитивные зависимости в каталог по своему выбору, поэтому я могу просто проверить их в своем SCM, как я обычно наслаждаюсь, и снова стать блаженным разработчиком.
Любые идеи, как это сделать легко?
Загрузка всех зависимостей maven в каталог NOT в хранилище?
Ответ 1
Плагин зависимости Maven потенциально может решить вашу проблему.
Если у вас есть pom
со всеми указанными зависимостями вашего проекта, все, что вам нужно сделать, это запустить
mvn dependency:copy-dependencies
и вы найдете папку target/dependencies
заполненную всеми зависимостями, включая транзитивные.
Добавление ответа Густаво снизу: Для загрузки источников зависимости вы можете использовать
mvn dependency:copy-dependencies -Dclassifier=sources
(через Apache Maven Dependency Plugin doc).
Ответ 2
Создайте файл ivy.xml, чтобы просмотреть зависимости проекта:
<ivy-module version="2.0">
<info organisation="org.demo" module="demo"/>
<configurations defaultconfmapping="default"/>
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.6"/>
..
</dependencies>
</ivy-module>
Загрузка этих банок и их транзитивных зависимостей теперь может быть выполнена одним из двух способов.
командной строки
Ivy может запускаться как программа командной строки. Следующий пример будет загружен в локальный каталог "lib":
java -jar ivy-2.2.0.jar -ivy ivy.xml -retrieve "lib/[artifact].[ext]"
ANT build
плющ лучше всего использовать при интеграции в сборку ANT. Следующий пример предназначен для загрузки баннеров в локальный каталог lib и генерирует отчет HTML для анализа зависимостей.
<target name="retrieve" description="Retrieve dependencies locally">
<ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/>
<ivy:report todir="${report.dir}" graph="false"/>
</target>
Ответ 3
Основываясь на ответе @Raghuram, я нахожу учебник по копированию зависимостей проекта, просто:
-
Откройте файл вашего проекта
pom.xml
и найдите его:<project> [...] <build> <plugins> ... </plugins> </build> [...] </project>
-
Чем заменить
<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>
-
И вызовите maven в командной строке
mvn dependency:copy-dependencies
После завершения он создаст папку target/dependency
во всех зависимостях jar
текущего каталога, в котором находится pom.xml
.
Ответ 4
Я наконец понял, как использовать 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.
Ответ 5
Я нашел следующую команду
mvn dependency:copy-dependencies -Dclassifier=sources
здесь maven.apache.org
Ответ 6
Проверьте, есть ли у вас файлы конфигурации в каталоге ${MAVEN_HOME}/conf
, например settings.xml
.
Эти файлы переопределяют параметры из папки .m2
, и из-за этого папка репозитория из .m2
может быть не видна или удалена.