Как мне скопировать зависимости времени выполнения моего проекта в target/lib
папку?
Как это сейчас, после того, mvn clean install
как target
папка содержит только jar моего проекта, но ни одна из зависимостей времени выполнения.
Как мне скопировать зависимости времени выполнения моего проекта в target/lib
папку?
Как это сейчас, после того, mvn clean install
как target
папка содержит только jar моего проекта, но ни одна из зависимостей времени выполнения.
Ответы:
Это работает для меня:
<project>
...
<profiles>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
excludeScope
опцию ( maven.apache.org/plugins/maven-dependency-plugin/… ).
<excludeScope>test</excludeScope>
идет внутри configuration
узла.
Лучший подход зависит от того, что вы хотите сделать:
mvn install dependency:copy-dependencies
У меня работает с каталогом зависимостей, созданным в целевой папке. Нравится это!
Взгляните на плагин зависимостей Maven , а именно, зависимость: цель копирования . Взгляните на пример под заголовком Зависимость: копия-зависимости mojo . Задайте для свойства конфигурации outputDirectory значение $ {basedir} / target / lib (полагаю, вам придется протестировать).
Надеюсь это поможет.
Простое и элегантное решение для случая, когда нужно скопировать зависимости в целевой каталог, не используя другие фазы maven (я нашел это очень полезным при работе с Vaadin).
Полный пример POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Тогда беги mvn process-sources
Зависимости файла JAR можно найти в /target/dependency
Если вы хотите делать это время от времени (и, следовательно, не хотите менять POM), попробуйте следующую командную строку:
mvn зависимость: копия-зависимости -DoutputDirectory = $ {project.build.directory} / lib
Если вы опустите последний аргумент , зависимости будут помещены в target/dependencies
.
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Попробуйте что-то вроде этого:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven clean install
, тогда вы найдете lib
вtarget
install
фазу process-resources
так, чтобы зависимости копировались до build
Все, что вам нужно, это следующий фрагмент внутри pom.xml build/plugins
:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Выше будет работать в package
фазе, когда вы запускаете
mvn clean package
И зависимости будут скопированы в outputDirectory, указанный во фрагменте, т.е. lib
в этом случае.
Если вы хотите делать это только время от времени, никаких изменений в pom.xml не требуется. Просто запустите следующее:
mvn clean package dependency:copy-dependencies
Чтобы переопределить расположение по умолчанию, то есть ${project.build.directory}/dependencies
добавить системное свойство с именем outputDirectory
, т.е.
-DoutputDirectory=${project.build.directory}/lib
Пред- полагая
вот что сработало для меня:
mvn установить зависимость: копия-зависимости -DincludeScope = время выполнения -DoutputDirectory = target / lib
Если вы хотите доставить пакет вашего jar приложения вместе со всеми его зависимостями и некоторыми сценариями для вызова MainClass, посмотрите на appassembler-maven-plugin .
Следующая конфигурация создаст сценарии для Window и Linux для запуска приложения (сгенерированный путь, ссылающийся на все jar-файлы зависимостей, загрузит все зависимости (в папку lib ниже target / appassembler). Затем плагин сборки можно использовать для упаковки всего каталог appassembler в виде zip-файла, который установлен / развернут вместе с jar-файлом в хранилище.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>generate-jsw-scripts</id>
<phase>package</phase>
<goals>
<goal>generate-daemons</goal>
</goals>
<configuration>
<!--declare the JSW config -->
<daemons>
<daemon>
<id>myApp</id>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<commandLineArguments>
<commandLineArgument>start</commandLineArgument>
</commandLineArguments>
<platforms>
<platform>jsw</platform>
</platforms>
</daemon>
</daemons>
<target>${project.build.directory}/appassembler</target>
</configuration>
</execution>
<execution>
<id>assemble-standalone</id>
<phase>integration-test</phase>
<goals>
<goal>assemble</goal>
</goals>
<configuration>
<programs>
<program>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<!-- the name of the bat/sh files to be generated -->
<name>mymain</name>
</program>
</programs>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/archive.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
Дескриптор сборки (в src / main / assembly) для упаковки директории в виде zip будет:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
Если вы сделаете свой проект войной или ушной, Maven скопирует зависимости.
Вы можете использовать плагин Shade для создания Uber JAR, в котором вы можете объединить все ваши сторонние зависимости.
Просто чтобы изложить то, что уже было сказано вкратце. Я хотел создать исполняемый файл JAR, который включал мои зависимости вместе с моим кодом. Это сработало для меня:
(1) В pom под <build> <plugins> я включил:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
(2) Запуск компиляции mvn: сборка создала нужный my-project-0.1-SNAPSHOT-jar-with-dependencies.jar в целевой папке проекта.
(3) Я запустил JAR с помощью java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
Это сложное решение для встраивания тяжелых зависимостей, но плагин сборки Maven помогает мне.
Ответ @ Rich продавца должен сработать, хотя для более простых случаев вам понадобится только эта выдержка из руководства по использованию :
<project>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Если у вас возникли проблемы, связанные с зависимостями, которых нет в файле WEB-INF / lib при работе на сервере Tomcat в Eclipse, взгляните на это:
Вам просто нужно было добавить зависимости Maven в Свойства проекта> Сборка развертывания.