我如何让我的项目的运行时依赖复制到目标/lib文件夹?
就像现在一样,在mvn清洁安装后,目标文件夹只包含我的项目的jar,但没有运行时依赖项。
我如何让我的项目的运行时依赖复制到目标/lib文件夹?
就像现在一样,在mvn清洁安装后,目标文件夹只包含我的项目的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 compile assembly:assembly在项目的目标目录下生成所需的my-project-0.1-SNAPSHOT-jar-with-dependencies.jar。
(3)我用java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar运行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 compile assembly:assembly在项目的目标目录下生成所需的my-project-0.1-SNAPSHOT-jar-with-dependencies.jar。
(3)我用java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar运行JAR
假设
您不希望更改pom.xml 你不想要测试范围(例如junit.jar)或提供的依赖关系(例如wlfullclient.jar)
以下是对我有效的方法:
mvn install dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/lib
最好的方法取决于你想做什么:
If you want to bundle your dependencies into a WAR or EAR file, then simply set the packaging type of your project to EAR or WAR. Maven will bundle the dependencies into the right location. If you want to create a JAR file that includes your code along with all your dependencies, then use the assembly plugin with the jar-with-dependencies descriptor. Maven will generate a complete JAR file with all your classes plus the classes from any dependencies. If you want to simply pull your dependencies into the target directory interactively, then use the dependency plugin to copy your files in. If you want to pull in the dependencies for some other type of processing, then you will probably need to generate your own plugin. There are APIs to get the list of dependencies, and their location on disk. You will have to take it from there...
对于需要将依赖项复制到目标目录而不使用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中找到
如果您在Eclipse中的Tomcat服务器上运行时遇到与WEB-INF/lib文件中未出现依赖项相关的问题,请查看以下内容:
启动Tomcat时的DispatcherServlet (Maven依赖没有复制到wtpwebapps)
您只需在项目属性>部署程序集中添加Maven依赖项。