如何将项目的运行时依赖项复制到target/lib
文件夹中?
就像现在一样,在mvn clean install
之后target
文件夹只包含我的项目的jar,但没有运行时依赖项。
答案 0 :(得分:240)
这对我有用:
<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>
答案 1 :(得分:80)
最好的方法取决于你想做什么:
答案 2 :(得分:67)
mvn install dependency:copy-dependencies
适用于我在目标文件夹中创建的依赖项目录。喜欢它!
答案 3 :(得分:33)
查看Maven dependency plugin,特别是dependency:copy-dependencies goal。请查看依赖项:copy-dependencies mojo 标题下的the example。将 outputDirectory 配置属性设置为$ {basedir} / target / lib(我相信,您必须测试)。
希望这有帮助。
答案 4 :(得分:30)
一个简单而优雅的解决方案,用于需要将依赖项复制到目标目录而不使用任何其他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
可以在/target/dependency
答案 5 :(得分:23)
如果你想偶尔这样做(因此不想更改你的POM),试试这个命令行:
mvn dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/lib
如果省略last argument,则依赖关系会放在target/dependencies
中。
答案 6 :(得分:20)
尝试这样的事情:
<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>
答案 7 :(得分:12)
您需要的只是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
答案 8 :(得分:6)
假设
这对我有用:
mvn install dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/lib
答案 9 :(得分:5)
如果要提供应用程序jar包及其所有依赖项和一些脚本来调用MainClass,请查看appassembler-maven-plugin。
以下配置将为Window和Linux生成脚本以启动应用程序(使用生成的路径引用所有依赖项jar,下载所有依赖项(到target / appassembler下面的lib文件夹中)。assembly plugin然后可以用于将整个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>
用于将direcotry打包为zip的汇编描述符(在src / main / assembly中)将是:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
答案 10 :(得分:2)
如果你的项目是war或ear类型maven将复制依赖项。
答案 11 :(得分:1)
您可以使用Shade Plugin创建一个超级jar,您可以在其中捆绑所有第三方依赖项。
答案 12 :(得分:1)
只是简单说明已经说过的内容。我想创建一个可执行的JAR文件,其中包含我的依赖项以及我的代码。这对我有用:
(1)在pom中,在&lt; build&gt;&lt; plugins&gt;下,我包括:
<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)我使用java -jar运行JAR my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
答案 13 :(得分:1)
这是嵌入重依赖的重要解决方案,但Maven的Assembly Plugin为我做了诀窍。
@ Rich Seller's answer应该可行,但对于更简单的情况,您只需要摘自usage guide:
<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>
答案 14 :(得分:0)
如果您在Eclipse中运行Tomcat服务器时遇到与WEB-INF / lib文件中没有出现的依赖关系相关的问题,请看一下:
您只需在项目属性中添加Maven依赖项&gt;部署大会。
答案 15 :(得分:0)
<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 这是我的pom,我错过了什么吗?创建的jar-with依赖项,不包含任何lib类或jar