Як отримати так, щоб залежність від виконання мого проекту була скопійована в target/libпапку?
Як зараз, після того mvn clean installяк targetпапка містить лише банку мого проекту, але жодна із залежностей від часу виконання.
Як отримати так, щоб залежність від виконання мого проекту була скопійована в target/libпапку?
Як зараз, після того mvn clean installяк targetпапка містить лише банку мого проекту, але жодна із залежностей від часу виконання.
Відповіді:
Це працює для мене:
<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 , зокрема, на мету залежності: мета-залежність від копіювання . Погляньте на приклад під заголовком Залежність: copy-залежності mojo . Встановіть властивість конфігурації outputDirectory на $ {basedir} / target / lib (я вважаю, вам доведеться протестувати).
Сподіваюсь, це допомагає.
Просте і елегантне рішення для випадку, коли потрібно скопіювати залежності в цільовий каталог, не використовуючи жодних інших фаз Maven (я вважав це дуже корисним під час роботи з Vaadin).
Повний приклад пам’яті:
<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 залежність: copy-зависимости -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
installprocess-resourcesbuild
Все, що вам потрібно, це такий фрагмент всередині 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, додайте властивість System з назвою outputDirectory, тобто
-DoutputDirectory=${project.build.directory}/lib
припущення
ось історія, яка працювала на мене:
mvn залежність установки: залежності від копіювання -DincludeScope = час виконання -DoutputDirectory = target / lib
Якщо ви хочете доставити пакет вашої банку додатків разом з усіма його залежностями та деякими сценаріями для виклику MainClass, подивіться на додаток appassembler-maven-plugin .
Наведена нижче конфігурація створить сценарії для запуску програми для Windows та Linux (із згенерованим контуром, що посилається на всі банки залежностей, завантажте всі залежності (у папку lib нижче цілі / 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>
Якщо ви зробите свій проект, війна або вуха типу «кавалер» буде копіювати залежності.
Ви можете використовувати плагін Shade для створення баночки uber, в яку ви зможете зв’язати всі ваші сторонні залежності.
Просто, щоб прописати те, що вже було сказано коротко. Я хотів створити виконуваний файл JAR, який включав мої залежності разом з моїм кодом. Це працювало для мене:
(1) У пам’яті, під <build> <додатки> я включив:
<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: збірка створила потрібний мій проект-0.1-SNAPSHOT-jar-with-зависимостtions.jar у цільовому каталозі проекту.
(3) Я керував JAR за допомогою java -jar my-project-0,1-SNAPSHOT-jar-with-зависимоtions.jar
Це важке рішення для вбудовування важких залежностей, але плагін Maven’s Assembly робить фокус для мене.
@ Відповідь багатого продавця має працювати, хоча для більш простих випадків вам потрібен лише цей уривок із посібника з використання :
<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, подивіться на це:
Вам просто довелося додати основні залежності в властивості проекту> збірка розгортання.