eclipse maven项目如何将所有的jar包复制到lib目录下?
Posted Marydon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eclipse maven项目如何将所有的jar包复制到lib目录下?相关的知识,希望对你有一定的参考价值。
1.情景展示
我们知道,maven项目的jar包并不存在于项目当中,项目所需的jar包都保存在本地仓库中,如果本地仓库没有,会从配置的中央仓库下载,如果中央仓库也没有就会报错;
如上图所示,我想将项目所依赖的所有jar包都放在src/main/webapp/WEB-INF/lib目录下, 如何实现?
这样做的目的,是为了可以热部署。
2.分析
默认情况下,要想获取项目所依赖的jar包,需要执行maven命令来实现,比如:mvn install
执行后,target目录下会出现该项目以及已经打好的包。
3.解决方案
通过更改maven默认的打包目录来实现。
第一步:借助插件maven-war-plugin更改项目打包所需的目录位置
<build> <finalName>mavenProject</finalName> <plugins> <!-- 更改maven默认的打包目录 maven默认打包目录:project/target/project/ 更改后的目录: project/src/main/webapp/ 更改后的改变: 1.target目录下不再生成项目,只生成项目对应的war包。 2.项目所需要的jar包会拷贝到lib目录下 --> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <webappDirectory>${project.basedir}/src/main/webapp</webappDirectory> <warSourceDirectory>${project.basedir}/src/main/webapp</warSourceDirectory> </configuration> </plugin> </plugins> </build>
第二步:更改class文件的编译位置
outputDirectory标签添加到build标签体内。
<!-- 更改maven默认class文件编译位置 maven默认编译目录:project/target/classes/ 更改后的目录: project/src/main/webapp/WEB-INF/classes/ --> <outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>
更改前的如上图所示,更改后,执行maven打包命令,效果图如下:
说明:
通过pom.xml更新jar包依赖后,需要Alt+F5,重新编译项目;
如果pom.xml中添加删除了对某个jar包的引用或者修改某个jar包的版本号,要想使lib目录同步,需要手动将lib目录下的jar包删光,否则,已经删除的jar包不会自动删除,已经更新版本的jar包会存在多个版本。
重新使用mvn clean install命令,才能将更新后的jar包同步到lib目录下。
第二步最好不要省略,因为如果不修改class的默认编译位置的话,同样存在着class文件无法同步的情况。
4.扩展
拓展一:在项目未打包前,也就是未执行mvn install命令时
在eclipse中,这并不影响,我们正常运行项目。
此时,并未执行mvn install命令,lib目录下也没有jar包。
前提:选中项目--》右键run as 或者debug as
eclipse会自动将pom文件中配置的jar包拷贝到{tomcat/webapps}/项目/WEB-INF/lib目录下
所以,项目可以正常运行而不报错。
之所以eclipse这么智能,是因为:
eclipse为mavenWeb项目添加了这个设置
将项目所需要的jar包,放置到WEB-INF/lib目录下。
不信自己可以测试一下。
如何添加这项设置?
如果按照我给你的流程创建mavenWeb项目,那这个设置肯定是有的,但是如果没有,请按下方操作:
第一,选中项目--》右键属性--》Deployment Assembly(如果你没有这个选项,说明你的项目不是一个真正的web项目)
第二,右侧--》Add--》Java Build Path Entries--》Next--》选中Maven Dependencies--》Finish
以上是关于eclipse maven项目如何将所有的jar包复制到lib目录下?的主要内容,如果未能解决你的问题,请参考以下文章
如何在eclipse中查找maven的各个jar包依赖的是别的啥jar包
已经搭建好java项目,如何直接将maven本地仓库中的所有jar通过pom直接引入