Maven可以收集项目的所有依赖JAR,以帮助部署应用程序吗?
我刚刚开始使用Maven (真正的评估它),我需要能够为我的应用程序和一个具有所有依赖关系的目录(例如lib)快速生成一个JAR文件,以便我可以部署这两个以独立的方式运行。 使用适当的清单生成JAR文件很容易,但我不知道如何让Maven将当前项目的依赖项复制到我可以部署的lib
目录中。
由于这是一个独立的Java应用程序,所以我对将其部署到Maven存储库不感兴趣,这也相当微不足道,或者至less很容易googleable。
我已经find了如何做一切事情, 除了复制依赖的JAR文件到一些指定的目录。 这是我正在寻找的工作stream程:
$ mvn clean $ mvn package $ cp -r target/{lib,myApp.jar} installLocation
然后,作为JAR文件从installLocation
运行myApp.jar
应该“只是工作”,不pipe我的$CLASSPATH
。
尝试抢先一些答案:
- 我有一个主要的类:设置,它工作正常。
- 我也在MANIFEST.MF中设置了类path,而且工作正常。
- 我已经发现如何使用
<classpathPrefix>
和<classpathMavenRepositoryLayout>
来使这个工作,但只在我的机器上。 (通过:<classpathPrefix>${settings.localRepository}</classpathPrefix>
)
你想调查的是Maven的依赖插件 。 向pom.xml添加类似于以下内容的内容:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory> ${project.build.directory} </outputDirectory> </configuration> </plugin>
然后运行mvn clean dependency:copy-dependencies
来复制执行副本。 把这个和汇编插件结合起来,你可以把所有的东西都打包成一个独立的文件夹来分发。
我并不关心Shade插件,因为它把所有jar子里的所有包装都放在一起。
要包含所有的外部库,你可以使用上面提到的依赖插件。
这个例子将在“包”阶段之前在“target / classes”下创build一个“lib”目录。
<插件> <的groupId> org.apache.maven.plugins </的groupId> <artifactId的>行家依赖性-插件</ artifactId的> <版本> 2.6 </版本> <处决> <执行> <ID>复制的依赖关系</ ID> <阶段>制备封装</相位> <目标> <目标>复制的依赖关系</目标> </目标> <结构> <输出目录>目标/类/ lib中</输出目录> <overWriteIfNewer>真</ overWriteIfNewer> <excludeGroupIds> JUnit中,org.hamcrest,org.mockito,org.powermock,$ {} project.groupId </ excludeGroupIds> </configuration> </执行> <执行> <阶段>产生来源</相位> <目标> <目标>的来源</目标> </目标> </执行> </处决> <结构> <详细>真</冗长> <详细>真</细节> <输出目录> $ {project.build.directory} </输出目录> </configuration> </插件>
还有一个是组装者插件
我喜欢的是它将应用程序打包成可以使用的forms(带有.bat文件等)
当然可以。 你需要使用可以通过添加完成的阴影插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.3-SNAPSHOT</version> <configuration> <!-- put your configurations here --> </configuration> </plugin>
到你的项目。
看看maven的依赖插件,特别是复制依赖目标。 用法部分描述了如何做到你想要的。
要从命令行执行操作,请执行以下操作:
$ mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
使用maven.repo.local可以收集所有的jar文件,但是它们被收集到一个带有maven层次结构(.m2)的目录中。
mvn install -Dmaven.repo.local=./pick/some/folder
然后你可以收集它们(在Linux上):
mkdir flat-repo find ./pick/some/folder -type f -name "*.jar" | xargs -I'{}' cp '{}' flat-repo/