Як отримати так, щоб залежність від виконання мого проекту була скопійована в 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
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
, додайте властивість 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, подивіться на це:
Вам просто довелося додати основні залежності в властивості проекту> збірка розгортання.