Maven詳細教學

一、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-apiservlet-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

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379461.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379461.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Character.UnicodeBlock of()方法與示例

Character.UnicodeBlock類的()方法 (Character.UnicodeBlock Class of() method) of() method is available in java.lang package. of()方法在java.lang包中可用。 of() method is used to return the Unicode block containing the given parameter value or it returns null…

simpleDBM的B-link樹實現

參考的是VLDB2005的這篇論文&#xff0c;做個標記把。/Files/YFYkuner/Concurrency_control_and_recovery_for_balanced_B-link_trees.pdf 轉載于:https://www.cnblogs.com/YFYkuner/archive/2009/12/21/1629268.html

網站后臺中對html標簽的處理

最近做一個CMS&#xff0c;后臺中需要使用在線編輯器對新聞進行編輯&#xff0c;然后發表。我用的在線編輯器是CKEditorCKFinder。也許是我為了讓CKEditor更本地化吧&#xff0c;改了很多。后來發現在CKEditor中對文字設置字體、顏色、字號大小時文字的<span>標簽會出現N…

Java Calendar getActualMaximum()方法與示例

日歷類的getActualMaximum()方法 (Calendar Class getActualMaximum() method) getActualMaximum() method is available in java.util package. getActualMaximum()方法在java.util包中可用。 getActualMaximum() method is used to return the maximum value that the given …

軟件研發人員考核的十項基本原則(轉)

軟件研發人員考核的十項基本原則 作者: 任甲林 來源: 萬方數據 軟件研發人員的考核一直是軟件企業管理的難點筆者在長期的研發管理實踐與咨詢實踐中總結了進行軟件研發人員考核的一些基本原則。(1) 要體現公司的價值觀公司的價值觀體現了公司認可什么類型的人員&#xff1f;…

2012.7.24---C#(2)

學習過了C#的基本屬性函數后&#xff0c;接下來的學習我覺得比較重要。C#是一種面向對象的語言&#xff0c;下面復習一下面向對象中的一些名詞。 類&#xff1a;把一些系列東西&#xff0c;把他們的共同的屬性和方法抽象出來&#xff0c;給他起一個名字就是XXX類。類中定義…

匯編語言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

1 : 基礎匯編語言展示 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov eax,5add eax,6INVOKE ExitProcess,0 main ENDP END main2:基礎匯編語言展示增加變量的訪問 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dw…

<各國地圖輪廓app>技術支持

如在app使用過程中遇到任何問題&#xff0c;請與開發者聯系caohechunhotmail.com

Java BigDecimal longValueExact()方法與示例

BigDecimal類longValueExact()方法 (BigDecimal Class longValueExact() method) longValueExact() method is available in java.math package. longValueExact()方法在java.math包中可用。 longValueExact() method is used to convert this BigDecimal to an exact long val…

c#中的多線程同步

在處理多線程同步問題的時候&#xff0c;我們一般有臨界區&#xff0c;互斥量&#xff0c;信號量和消息機制等幾種解決方案&#xff0c;在c#中可以非常方便的使用它們來實現進程的同步。下面我就常用的lock,Monitor和Mutex幾種來說明如何實現進程的同步。 lock和Monitor依靠一種…

ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“

windows下&#xff1a; ffplay 提示"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can’t initialize audio client" 添加環境變量&#xff1a;SDL_AUDIODRIVERdirectsound

js 正則表達式,正整數

var ss "3.333";var type /^[0-9]*[1-9][0-9]*$/;var re new RegExp(type);alert(ss.match(re));if (ss.match(re) null) {alert("請輸入大于零的整數!");return;} 轉載于:https://www.cnblogs.com/lingxzg/archive/2012/08/02/2620543.html

java 根據類名示例化類_Java即時類| EpochSecond()方法的示例

java 根據類名示例化類EpochSecond()方法的即時類 (Instant Class ofEpochSecond() method) Syntax: 句法&#xff1a; public static Instant ofEpochSecond(long sec_val);public static Instant ofEpochSecond(long sec_val, long nanos_adjust);ofEpochSecond() method is…

java中Date()類型輸入數據的處理

對于Date類型的數據&#xff0c;需要輸入生日存入相應數據庫中 private Date birthday;// 生日package com.pdsu.mybatis.pojo;import java.io.Serializable; import java.util.Date;public class User implements Serializable {/*** */private static final long serialVers…

(擴展)歐幾里德快速冪

GCD模板 __int64 gcd(__int64 a,__int64 b) {return b0? a:gcd(b,a%b); } 歐幾里德算法又稱輾轉相除法&#xff0c;用于計算兩個整數a,b的最大公約數。其計算原理依賴于下面的定理&#xff1a; gcd函數就是用來求(a,b)的最大公約數的。 gcd函數的基本性質&#xff1a; gcd(a,…

匯編語言-002(.data、Equal、$、EQU 、MOV 、MOVSX、MOVZX)

1&#xff1a;變量相加程序 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data firstval DWORD 20002000h secondval DWORD 11111111h thirdval DWORD 22222222h sum DWORD 0.code main PROCmov eax,firstvaladd eax,secondvaladd eax,thirdvalm…

\r與\n的區別,\r\n與\n或\r的區別(C語言/C#)

本文出處http://topic.csdn.net/t/20020718/07/882679.html 原作者:triout&#xff08;笨牛&#xff09; \r表示回車&#xff0c;\n表示換行&#xff0c;我們按回車按鈕的時候&#xff0c;系統自動產生回車和換行兩個字符&#xff1a; 回車僅僅是表示完成&#xff0c;把光…

通過ID查詢一個用戶的兩種開發方法

通過ID查詢一個用戶的兩種開發方法 數據庫建表sql語句如下&#xff1a;https://github.com/beyondyanyu/Sayingyy/blob/master/JDBC2-數據庫sql建表語句 ①&#xff0c;原始Dao開發&#xff1a; UserDao.java&#xff08;接口&#xff09;: package com.pdsu.mybatis.dao;i…

duration java_Java Duration類| minusMinutes()方法與示例

duration java持續時間類minusMinutes()方法 (Duration Class minusMinutes() method) minusMinutes() method is available in java.time package. minusMinutes()方法在java.time包中可用。 minusMinutes() method is used to subtract the given duration in minutes from t…

Silverlight + WCF異步調用 例子

看大家好像對我的NParsing框架不是很感興趣&#xff08;寫NParsing帖沒人頂我&#xff09;&#xff0c;那就給大家來點“甜品”&#xff0c;換換口謂。來說說Silverlight方面的東西。 在Silverlight中數據通信只能用異步。有人會覺得寫起來很麻煩&#xff0c;其實不然。也有很簡…