07.SSM框架集~Maven的初步使用

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:生成項目報告,站點,發佈站點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章