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目录下?的更多相关文章

  1. eclipse maven项目导出所使用的jar包

    在eclipse中定位到maven项目的pom.xml文件右击pom.xml文件,选择Run As-->Maven build…在打开的页面中,GOLAS栏输入“dependency:copy- ...

  2. Eclipse下新建Maven项目、自动打依赖jar包

    当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...

  3. eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN

    eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错?java. ...

  4. MyEclipse部署外部引用的jar到web-inf的lib目录下

    在用MyEclipse开发java web项目的时候,引入了外部jar,都是以library的形式存在左边的explore中的,调试没有问题,但是部署之后呢,经常遇到个非常头疼的问题就是,这些jar不 ...

  5. Eclipse里面的Maven项目如果下载依赖的jar包的源码

    Window---------Properties---------------Maven--------------勾选Download Artifact Sources和Download Arti ...

  6. maven项目发布到Tomcat丢失jar包

    昨天看了一篇tomcat设置的文章,说要把第一个勾上,这样不需要更新到tomcat.  一启动tomcat就发现丢包.后来在网上看了许多文章,说要update maeven项目,然后你就会发现启动过程 ...

  7. maven项目使用自己创建的jar包--maven without test code

    eclipse版本为2018-12(4.10.0) 1.创建一个jar包 首先自己建立了一个maven project,名为jweb.GAV坐标: <groupId>amberai< ...

  8. 3.如何在Maven项目中引入自己的jar包

    1.一般情况下jar包都可以使用pom.xml来配置管理,但也有一些时候,我们项目中使用了一个内部jar文件,但是这个文件我们又没有开放到maven库中. 我们会将文件放到我们项目中.(以下以java ...

  9. 通过idea 打包 spring maven项目打包为可执行jar包

    用assembly打包一直报错: shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-j ...

随机推荐

  1. CF1254D Tree Queries(树链剖分)

    出题人的做法是 \(O(n\sqrt{n\log n})\),结果这场结束后就被狂喷,一群人给出了 \(O(n\sqrt{n})\) 做法,甚至 \(O(n\log n)\) 都出来了-- 首先发现, ...

  2. Python变量与内存管理

    Python变量与内存管理 –与C语言中的变量做对比,更好的理解Python的变量. 变量 变量在C语言中  全局变量:其存放在内存的静态变量区中.  局部变量:代码块中存放在内存的代码区当中,当被调 ...

  3. PHP实现Redis分布式锁

     锁在我们的日常开发可谓用得比较多.通常用来解决资源并发的问题.特别是多机集群情况下,资源争抢的问题.但是,很多新手在锁的处理上常常会犯一些问题.今天我们来深入理解锁. 一.Redis 锁错误使用之一 ...

  4. vscode常用快捷键与插件推荐

    一.vscode常用快捷键 1.新建文件:chtr+n 2.新开窗口:ctrl+shift+n 3.分屏:ctrl+1/2/3  4.切换文件:alt+1/2/3或ctrl+tab 5.关闭当前窗口: ...

  5. Netty — 线程模型

    一.前言 众所周知,netty是高性能的原因源于其使用的是NIO,但是这只是其中一方面原因,其IO模型上决定的.另一方面源于其线程模型的设计,良好的线程模型设计,能够减少线程上下文切换,减少甚至避免锁 ...

  6. C#判断dataGridView1 点击的是哪一列上的按钮

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { ) { DataGr ...

  7. C#A类派生类强转基类IL居然还是可以调用派生类中方法的例子

    大家都知道在C#中,如果B类继承自A类,如果一个对象是B类型的但是转换为A类型之后,这个对象是无法在调用属于B类型的方法的,如下例子: 基类A: public class A { } 派生类B: pu ...

  8. GO基础之函数

    一.Go语言函数的格式 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列表.返回值.函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块. 函 ...

  9. python web框架Flask——后台登录

    项目搭建 创建一个项目之后,需要在手动创建几个包(含有__init__.py文件的目录)和文件 1.在主目录下创建配置文件:config.py 2.在主目录下创建扩展文件:exts.py 3.在主目录 ...

  10. docker挡板程序实现启动多个实例进程

    启动服务: docker-compose restart