Как мне получить зависимостей времени выполнения проекта, скопированных в папку 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>
Наилучший подход зависит от того, что вы хотите сделать:
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 dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/lib
Если вы опустите последний аргумент, зависимости помещаются в target/dependencies
.
Попробуйте что-то вроде этого:
<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>
Все, что вам нужно, это следующий фрагмент внутри 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 install dependency:copy-dependencies -DincludeScope=runtime -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) для упаковки direcotry в виде 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 Plugin, чтобы создать банку uber, в которой вы можете связать все зависимые от сторонних сторон.
Просто чтобы изложить то, что было сказано вкратце. Я хотел создать исполняемый JAR файл, который включал мои зависимости вместе с моим кодом. Это сработало для меня:
(1) В pom, под <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: сборка создала желаемый файл my-project-0.1-SNAPSHOT-jar-with-dependencies.jar в целевом каталоге проекта.
(3) Я запускал JAR с java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
Это тяжелое решение для вложения тяжелых зависимостей, но Maven Assembly Plugin делает трюк для меня.
@Ответ Богатого продавца должен работать, хотя для более простых случаев вам потребуется только эта выдержка из руководство по использованию:
<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 в свойствах проектa > сборка развертывания.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.edge</groupId>
<artifactId>STORM2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>STORM2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<profiles>
</profiles>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.edge.STORM2.LogAnalyserStorm</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
@john Это моя девушка, я что-то упустил? созданный jar-с зависимостями, не содержит ни одного класса lib или jar