一、Maven簡介
maven:是apache下的一個開源項目,是純java開發,并且只是用來管理java項目的
依賴管理:就是對jar包的統一管理 可以節省空間
項目一鍵構建:mvn tomcat:run
該代碼可以將一個完整的項目運行起來,實現編碼 編譯 測試(junit) 運行 打包 部署。
好處:
①節省空間,對jar包進行了統一管理,依賴管理
②一鍵構造
③可跨平臺
④應用在大型項目可提高開發效率
二、Maven環境變量配置:
1,我的電腦—>右擊屬性
2,找到高級系統設置
3,點擊 環境變量
4,新建 系統變量
6,需要填的內容為(直接復制粘貼即可,第二個變量值以maven的具體路徑為主):
MAVEN_HOME
E:\maven\apache-maven-3.3.9
maven的具體路徑如題所示,到bin這層即可。
8,找到Path–>編輯–>在最后面加入下面內容,記得前后都有;
隔開、最后點擊確定即可。
;%MAVEN_HOME%\bin;
9,檢驗,win+R—>cmd—>mvn -v
若出現以下信息表示安裝成功。
三、引入倉庫(若沒有,則輸入命令的時候需要從互聯網上下載,比較麻煩,慢)
maven有三種倉庫:
本地倉庫(自己維護)、遠程倉庫(公司維護)、中央倉庫(maven團隊維護)。
本地倉庫的配置只需要修改setting.xml文件即可
將已下載好的東西放到如下位置,該文件里面有所有maven所需要用到的東西
找到maven–>conf–>setting.xml文件
需要找到該倉庫的位置
找到setting.xml文件,更改需要查找配置文件的位置,保存一下即可
運行一個簡單的java文件試驗一下:
輸入命令:mvn tomcat:run
出現以下信息表示運行成功
四、maven的目錄結構
其中pom.xml文件是整個maven項目的核心文件
而setting.xml文件是maven軟件的核心文件
五、maven命令的生命周期
1,maven常用命令:
初始maven文件
①mvn tomcat:run 運行maven項目,一鍵啟動
會生成一個target文件夾,該文件夾就是所謂編譯之后的文件
運行之后結果如下:
② mvn clean 清理編譯文件
即,將target文件夾給清除掉
運行結果如下:
③mvn compile 編譯主目錄src下的java代碼
也會生成target文件夾,但是該命令還會將主目錄src下的java文件給編譯生成.class
文件
④mvn test 編譯并運行了test目錄的代碼
也會生成target文件夾,但是該命令還會將測試目錄test下的java文件給編譯生成.class
文件
⑤mvn package 打包
運行結果如下:
⑥mvn install 把項目發布到本地倉庫中
即生成war包放到本地倉庫中去
運行結果如圖所示:
⑦mvn site 在target目錄下,生成site文件夾,里面主要是靜態頁面
⑧mvn compile 把項目發布到私服上,讓其他開發人員與項目共享
compile test package install deploy
例如:當執行test命令時,會自動將compile命令給執行
也就是執行后面的命令,前面的命令也就自動執行
這也就是maven的生命周期
maven的三個生命周期
clean生命周期(clean)
default生命周期(compile test package install)
site生命周期(site)
不同的生命周期的命令可以同時執行
例如:mvn clean package
六 、maven在eclipse中的一些配置
eclipse要用到MARS.2版本
M2e插件:但凡在eclipse上安裝的插件都叫M2e插件
更換瀏覽視圖
配置編碼環境
①
②
maven插件的配置
①選擇自己的maven軟件版本3.3.9
②修改默認的本地倉庫
創建索引(才能手動添加依賴)
打開maven倉庫視圖
重建索引,右擊
如圖所示,前面出現小三角表示重建索引成功
七、創建maven項目
①,新建maven項目
②,勾選該復選框,跳過骨架選擇
③、創建maven工程
④、解決紅色感嘆號問題
⑤、(每次創建maven項目都需要自己手動創建)自己手動在src-main-webapp
下創建一個WEB-INF
文件夾,在該文件夾下隨便添加一個web.xml
文件即可
⑥,處理編譯版本
有圖可知,該版本為1.5,但開發要用到1.8的版本
添加如下代碼到pom.xml文件中,保存一下,即可看見版本變為1.8
<build><!-- 配置了很多插件 --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version> <configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
此時仍會報錯,這時需要更新一下maven項目
最后點一下OK即可
然后就會發現maven項目下紅色感嘆號消失了
八、在src/main/java文件夾下創建一個servlet
創建完servlet之后會發現有一大堆報錯!!!
①、當創建servlet的時候,編譯器會自動將web.xml
做一些修改,把頭部信息,從而導致信息重復,去掉一個,保存一下即可。
刪除代碼:xmlns="http://java.sun.com/xml/ns/javaee"
②.
依賴傳遞:也就是當你添加一個依賴的時候,若該依賴依賴其他jar包,添加該依賴的時候會直接添加其所依賴的所有的依賴jar包。
方法一:自動添加依賴:
servlet沒有導包,需要推薦依賴(jsp所需的一些api)
在pom.xml
下添加如下代碼即可
<!-- 添加servlet-api,jsp-api --><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies>
同時編譯器會自動從本地倉庫導入相關jar包
方法二:手動添加依賴
①添加jsp依賴
拓展:可知有五個Scope,也就是依賴范圍!!!詳細介紹往后翻閱拓展部分
jsp依賴添加成功觀察pom.xml上生成一些代碼,也就是jsp-api的依賴
②添加servlet依賴
同樣,添加依賴之后也會在pom.xml中自動生成一些依賴代碼
③添加junit依賴
同樣,pom.xml文件會多出一些依賴代碼,但是這個比較特殊
九、在eclipse上運行maven項目
觀察控制臺
從web.xml上找到servlet的路徑
訪問即可
案例需求:整合struts2,頁面上傳一個客戶id,跳轉頁面
①,需要跳轉頁面,做一個簡單的jsp
需要依賴jsp-api、junit、servlet詳細依賴配置向上翻閱
由于需要整合struts2,所以需要依賴struts2-core,同樣的方法,添加依賴
②,在src/main/java文件夾下創建一個Class
package beyondsq;import com.opensymphony.xwork2.ActionSupport;public class CustomerAction extends ActionSupport {private Long custId;public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String findCustomerById(){System.out.println("前端正在登錄的客戶id為:"+ custId);return SUCCESS;}
}
③、由于需要頁面的跳轉,需要用到struts的核心配置文件,struts.xml
拷到src/main/resources
文件夾下
這里的配置文件有所限制,必須是.action
結尾的
struts.xml內容如下:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 配置常量 --><!-- 字符集 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 開發模式 --><constant name="struts.devMode" value="true"></constant><!-- 主題 --><constant name="struts.ui.theme" value="simple"></constant><!-- 擴展名 --><constant name="struts.action.extension" value="action"></constant><!-- 通用package --><package name="customer" namespace="/" extends="struts-default"><action name="findById" class="beyondsq.CustomerAction" method="findCustomerById"><result name="success">/sq.jsp</result></action></package>
</struts>
④、由于用到strut2,需要對web.xml配置過濾器
web.xml文件代碼如下:<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>
⑤、由于使用tomcat:run運行的時候,是用tomcat容器運行該項目, 雖然maven就是一個插件,但是tomcat所需要的東西,maven插件里面都有。例如:tomcat里面的lib文件夾里面有jsp-api.jar、servlet-api.jar這兩個jar包,而pom.xml里面就已經有這兩個jar包了。因為這兩個jar包沖突了,也不能把pom.xml里面的依賴給去掉,去掉之后web.xml就會報錯,所有此時需要處理jar包沖突問題,此時就需要翻閱上文的拓展部分了,即Scope,依賴范圍!!!!
⑥、然后再build運行一下maven
⑦、訪問網址即可
其中custId可順便填寫
http://localhost:8080/maven-first/findById.action?custId=1014
拓展部分
有前面的Scope可知有五個范圍,分別為:compile、provided、runtime、test
其中默認的依賴范圍為compile,可以省略不寫
上述案例需求可知,將jsp-api和servlet-api的Scope改為provided,它需要這兩個jar包,但是tomcat里面本來就有,不需要從自己的maven倉庫里使用,所以改成了provided,也就是使用的jar包是來自tomcat。當將maven項目打包(package)的時候,若是provided,則只會出現一個jsp和一個servlet有關jar包這兩個包都是tomcat自帶的。若是默認compile,則出現兩個jsp和servlet包,一個來自tomcat一個來自自己的maven倉庫。
test:只是針對junit來說的,若將junit的Scope改為test,則將maven項目打包的時候不會出現junit有關jar包
編譯的時候,編譯的是src/main/java里面的文件;而junit測試的時候,編譯的時候src/test/java里面的文件,也就是junit測試都是寫在src/test/java文件夾下的
①Scope為compile依賴時(默認依賴,拿Struts2-core),編譯時需要,測試時需要,運行時需要(打包時需要有關jar包)
②Scope改為provided依賴時(拿jsp-api.jar、servlet-api.jar為例子),編譯時(compile)需要用到有關jar包,測試時也需要用到有關jar包,
運行時不需要有關jar包(打包時不需要有關jar包)
③Scope改為runtime依賴時(拿j驅動包DBUtil為例子),編譯時不需要,測試時需要,運行時需要(打包時需要有關jar包)
④Scope改為test依賴時(拿junit.jar包為例子,junit是開發人員來寫的),編譯時不需要,測試時需要,運行時不需要(打包時不需要有關jar包)
添加插件(插件也是一個依賴也是一個jar包)
①、更換tomcat端口和訪問路徑
在pom.xml下添加如下代碼(端口:1014,訪問路徑:localhost:1014/sq/…):
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><port>1014</port><path>/sq</path></configuration>
</plugin>
②、更換tomcat7,此時運行的時候需要:tomcat7:run