07.SSM框架集~Maven
本文是上一篇文章的後續,詳情點擊該鏈接
本章資料 提取碼:9rqj
Maven
Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階(phase)中插件(plugin)目標(goal)的邏輯。
傳統方式中項目jar包資源的問題:
問題一:
項目中的jar包資源需要我們自己從網上下載後,手動導入到項目中使用,一旦jar包資源過多,容易造成遺漏並且不好管理。
問題二:
假如我們有兩個項目,項目A和項目B,如果項目A中需要使用項目B 中的某些資源,需要我們自己手動的將項目B中的資源導出爲jar包,然後手動導入到A項目中,比較麻煩。
解決方案:
Maven項目資源管理工具
maven與ant有什麼不同:
Ant是軟件構建工具,Maven的定位是軟件項目管理和理解工具。總的來說:
第一:ant腳本是可以直接運行在maven中的。maven和ant最大的差別就是在於maven的編譯以及所有的腳本都有一個基礎,就是POM(project object model)。這個模型定義了項目的方方面面,然後各式各樣的腳本在這個模型上工作,而ant完全是自己定義,顯然maven更勝一籌。
第二:Maven對所依賴的包有明確的定義,如使用那個包,版本是多少,一目瞭然。而ant則通常是簡單的inclde 所有的jar。導致的最終結果就是,你根本無法確定JBoss中的lib下的common-logging 是哪個版本的,唯一的方法就是打開 META-INF 目錄下MANIFEST.MF。
第三:Maven是基於中央倉庫的編譯,即把編譯所需要的資源放在一箇中央倉庫裏,如jar,tld,pom,等。當編譯的時候,maven會自動在倉庫中找到相應的包,如果本地倉庫沒有,則從設定好的遠程倉庫中下載到本地。這一切都是自動的,而ant需要自己定義了。這個好處導致的結果就是,用maven編譯的項目在發佈的時候只需要發佈源碼,小得很,而反之,ant的發佈則要把所有的包一起發佈,顯然maven又勝了一籌。
第四:maven有大量的重用腳本可以利用,如生成網站,生成javadoc,sourcecode reference,等。而ant都需要自己去寫。
Maven 的優點:
1. 簡化了項目依賴管理:jar包管理,防止了衝突
2. 便於與持續集成工具(jenkins)整合
3. 便於項目升級,無論是項目本身升級還是項目使用的依賴升級。
4. 有助於多模塊項目的開發,一個模塊開發好後,發佈到倉庫,依賴該模塊時可以直接從倉庫更新,而不用自己去編譯。
5. maven有很多插件,便於功能擴展,比如生產站點,自動發佈版本等
Maven的基本原理圖
Maven的專業術語:
中央倉庫(Central Repository), 官方維護, 存放所有相關的jar包(包含各個版本)
本地倉庫(Local Repository), maven項目都是從本地倉庫加載jar包的.
鏡像倉庫(Mirror Repository), 國內有能力的組織(機構)搭建的倉庫, 這個倉庫就是將中央倉庫中的所有內容複製了一份存起來.
jar包的定位: 座標, 三部分構成
GroupId: 一般是逆向公司域名 com.alvin
ArtifactId: 一般是項目(jar)名 mybatis-3.5.2
Version: 版本號 3.5.2
Maven的下載
爲了使用 Maven 管理工具,我們首先要到官網去下載它的安裝軟件。通過百度搜索“Maven“如下
點擊 Download 鏈接,就可以直接進入到 Maven 軟件的下載頁面
將maven的壓縮包解壓到指定的文件夾中,儘量全英文路徑
maven的目錄介紹
bin: Maven操作指令,集成IDE後可以在IDE中調用
conf: maven的配置文件,可以配置maven的本地倉庫地址和雲倉庫地址,以及maven的jdk版本等,項目的編譯是maven來調用JDK完成編譯,不再是idea工具來調用jdk編譯
配置Maven倉庫
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地倉庫 -->
<localRepository>E:/Repository</localRepository>
<mirrors>
<!-- 配置鏡像倉庫地址 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<!-- 配置jdk版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</settings>
在idea中集成maven
優化處理 -DarchetypeCatalog=internal
Maven的項目類型
傳統項目類型
JAVASE項目:
用來開發java項目的目錄結構體系,項目的結構體系是給我們的JDK工具來看的。
JAVAEE項目:
是一個web項目,該項目的運行不僅僅需要JDK的支持還需要服務器容 器的支持。該項目的結構體系給服務器來查看的。
Maven項目類型
jar: java工程, 項目最終被打包爲jar包
war: web工程, 項目被打包爲war包
pom: 邏輯工程, 父工程必須是pom類型的工廠. pom工程中不寫java代碼, 值用於進行子工程的管理.
Maven project的創建和使用
Maven的jar類型的項目
1.創建jar類型項目
點擊file-->new-->moudle-->maven,然後點擊下一步即可
填寫當前創建的maven項目的資源座標,便於其他項目來調用我們的項目資 源。
分別對應域名,項目名和版本號,上面有介紹
點擊finish完成創建,然後在右下角的提示中點擊import Changes
jar類型項目的結構
jar類型項目的特點
jar類型的項目,相當於JAVASE項目
jar項目編譯後的項目結構體系和原有的JAVASE項目編譯後的結構體系相 同
默認在test目錄下的測試代碼是不會編譯到項目中的。
Maven的war類型項目
maven的war類型項目的創建
一直點擊下一步,和jar差不多。記得在窗口中點擊import changes
在war項目下的src下的main目錄下手動創建java和resources目錄。
java目錄作爲java源碼存方法目錄
resources目錄作爲配置文件目錄
war類項目項目的特點
相當於我們以前的JAVAEE項目,完成web項目的開發。
項目編譯後的結構體系和原有的JAVAEE項目編譯後的結構體系是相同的, 也就說我們maven的war類型項目編譯後的資源也可以直接在tomcat中使用
pom文件的配置內容
modelverson:聲明模塊的版本
當前項目的資源座標:給maven查看 ,並便於maven查找到該項目給其他項目使用
配置第三方的資源座標:讓maven根據座標從本地倉庫中引入第三方的資源到項目中使用,如果本地倉庫中沒有,則會自動從雲倉庫中下載
我們可以在https://mvnrepository.com/下來搜索需要的資源座標,然後當我們將資源座標變更後,需要點擊import changes讓maven重新加載pom文件,根據最新的資源座標獲取資源到項目中
maven將資源引入到項目中後,在idea的項目視圖中是看不到第三方資 源的,需要點擊idea右側欄上的maven,進入maven的資源管理視 圖中,查看當前項目中引入的第三方的資源。
properties自定義資源版本號管理
一個第三方資源會有很多的版本,比如mybatis,spring等如果我們需要引入的第三方資源過多,當我們對某一個資源的版本號進行修改時,不好修改。可以使用properties標籤將資源的版本號單獨 的聲明在外部,便於我們的修改。
在以前的JAVAEE項目中,IDE工具會自動的將JDK以及tomcat的資源依賴到項目中,我們在web-inf下的lib文件夾下聲明的是自定義的第三方資源,而maven中的war類型項目中默認是沒有給我們引入任何第三方資源的,造成我們在war類型項目中無法直接創建jsp和聲明Servlet完成最基本的web開發。
配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bjsxt</groupId>
<artifactId>02_maven_war</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--配置版本號-->
<properties>
<servlet-version>3.1.0</servlet-version>
<jsp-version>2.2</jsp-version>
<jstl-version>1.2</jstl-version>
</properties>
<!--配置資源座標-->
<dependencies>
<!--servlet的資源座標-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-version}</version>
<scope>provided</scope>
</dependency>
<!--jsp的資源座標-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
<scope>provided</scope>
</dependency>
<!--jstl的資源座標-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>6060</port><!--配置tomcat啓動的端口號-->
<path>/my</path><!--配置項目的訪問名稱-->
</configuration>
</plugin>
</plugins>
</build>
</project>
運行一下Servlet吧~
我們現在導入一下數據庫jar包試試
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alvin</groupId>
<artifactId>maven_jar</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
</project>
public class Test {
public static void main(String[] args) {
StudentMapper studentMapper = DBUtil.getSqlSession().getMapper(StudentMapper.class);
List<Student> list = studentMapper.FindAll();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
maven指令的生命週期
Clean Lifecycle 在進行真正的構建之前進行一些清理工作。
Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle 生成項目報告,站點,發佈站點。
常用指令
clean:清除maven項目下的target目錄中的class和本地倉庫中已打包的文件。
validate:驗證工程是否正確,所有需要的資源是否可用。
compile:即編譯項目中的java文件,並存放在項目的編譯目錄。
deploy:將打包在本地倉庫中的項目發佈到服務器,供他人依賴使用
test: 即運行項目中的測試用例文件,如果測試用例未通過,也會打包失敗,這裏test過程可以在pom中通過配置跳過。
package:將本地編譯好的文件打包爲war 或者jar。
verify: 運行任何檢查,驗證包是否有效且達到質量標準。
install:將打包的代碼存放到本地maven倉庫,可供本地其它項目依賴使用。
site:生成項目報告,站點,發佈站點。