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