Maven项目整合讲义(Eclipse版)
?
1.? Maven概述
1.1.?? Maven是什么
Maven是一個由Apache基金會維護的項目構建工具。
?
1.2.?? 項目構建是什么
我們將項目的代碼從源代碼到具體程序文件的過程稱為代碼構建。
行為包括:編譯、測試、運行、打包、部署的過程
?
1.3.?? Eclipse項目構建
Eclipse構建項目的過程圖示:
?
| ? ? |
?
?
構建過程如下:
1)創建一個Web項目
2)在項目中編寫好源代碼和配置文件
3)對源代碼編譯生成class文件
4)通過Junit對代碼單元測試
5)將項目通過Eclipse工具放在Tomcat運行
6)將項目導出war,放在Tomcat運行
?
1.4.?? Maven構建項目
通過Maven構建工具可以一條命令完成上面所有的操作:
?
| ? ? |
?
?
1.5.?? 使用Maven的好處
?
2.? Maven的安裝
2.1.?? Maven說明
下載路徑:http://maven.apache.org/download.cgi
目錄說說明:
| ? ? |
?
2.2.?? 環境配置
2.2.1.? 第一步:確定JAVA_HOME配置
前提:如果要在CMD命令行運行Maven,必須要配置JAVA_HOME環境變量
通過set命令
| ? ? |
?
?
如果沒有配置JAVA_HOME環境會導致運行獲得Java運行環境,異常如下:
| ? ? |
?
?
?
2.2.2.? 第二步:配置MAVEN_HOME環境變量
?
| ? ? |
?
2.2.3.? 第三步:指定Maven執行命令到當前目錄
配置執行目錄到PATH環境變量,讓命令可以在當前目錄可以執行
--變量Path變量
| ? ? |
--成功增加結果變量:%MAVEN_HOME%\bin
?
2.2.4.? 第四步:測試配置,在CMD下鍵入mvn -h
如果返回參數提示如下圖,說明配置成功!
| ? ? |
?
2.2.5.? 第五步:配置Maven國內源
由于默認Maven使用國外的源,會導致下載jar比較慢。
配置Maven下conf文件夾的settings.xml文件
| ? <mirrors> ??? <!-- mirror ???? | Specifies a repository mirror site to use instead of a given repository. The repository that ???? | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used ???? | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. ???? | ??? <mirror> ????? <id>mirrorId</id> ????? <mirrorOf>repositoryId</mirrorOf> ????? <name>Human Readable Name for this Mirror.</name> ????? <url>http://my.repository.com/repo/path</url> ??? </mirror> ???? --> ???????? ??? <mirror> ????? <id>alimaven</id> ????? <name>aliyun maven</name> ????? <url>http://maven.aliyun.com/nexus/content/groups/public/</url> ????? <mirrorOf>central</mirrorOf>????? ?? ??? </mirror> ? ? </mirrors> |
?
3.? 入門配置
需求:通過命令行,使用Maven項目創建一個Java項目,并且打包。
?
3.1.?? 第一步:創建項目
使用mvn archetype:generate命令創建java項目
?
?
?
| ? ? |
?
3.2.?? 第二步:設置坐標信息
設置坐標信息,通過以下三個信息確定坐標。標記全球Maven項目的唯一性。
groupId:組織ID
artifactId:項目名
package:包名
| ? ? |
--提示,創建成功
| ? ? |
?
3.3.?? 第三步:編譯項目
使用命令 mvn compile
| ? ? |
--編譯成功,生成target文件夾
| ? ? |
3.4.?? 第四步:打包
通過命令mvn package
| ? ? |
--打包成功,在target文件夾下會生成jar包
| ? ? |
?
--通過該入門示例,可以發現,使用Maven創建構建項目,是可以不依賴任何開發工具的。
?
通過該入門示例,我們看到了我們需要學習的內容包括:Maven的命令、倉庫
?
問題:默認Maven倉庫在哪里?
答:C:\Users\YL\.m2 ,在登錄用戶的個人文件夾里面的.m2文件夾就是倉庫
?
問題:有什么辦法了解更多的mvn的命令呢?
答:mvn下的命令都是一個插件,Maven工具內置的可以使用的插件都在其官方幫助文檔找到說明。
https://maven.apache.org/plugins/index.html
?
4.? Eclipse使用Maven
4.1.?? 配置Maven
4.1.1.? 第一步:打開Eclipse首選項
| ? ? |
4.1.2.? 第二步:配置外部Maven
配置指定外部的Maven
| ? ? |
--選擇使用配置的外部的Maven
| ? ? |
4.1.3.? 第三步:【可選】查看默認本機倉庫
| ? ? |
?
?
4.2.?? 通過Maven創建普通項目
?
4.2.1.? 第一步:創建一個Maven項目
| ? ? |
?
4.2.2.? 第二步:創建一個自定義的Maven項目
| ? ? |
?
4.2.3.? 第三步:設置項目構建信息
GroupId:組編號
ArtifactId:項目標識符(項目的項目名)
注意:Maven是通過GroupId和ArtifactId來確定項目的唯一性,我們稱為坐標。任何項目要發布到Maven的庫中,必須要有一個全球唯一的坐標。
?
Version:發布的版本號
Packaging:打包方式。
(1)jar:以jar包方式打包,普通java項目
(2)war:以war包方式打包,是web項目
(3)pom:不打包,表示該項目是一個聚合項目。在多子項目的項目中,用于管理公用Maven構建屬性
Name:【可以忽略】就是一個項目的一個名稱,實際實戰中,一般跟ArtifactID一致。
Description:【可以忽略】就是項目的描述
?
| ? ? |
--創建成功
| ? ? |
?
4.2.4.? 第四步:創建一個簡單的HelloWorld類
| package cn.zj; public class HelloWorld { ??? ??? public static void main(String[] args) { ??????? System.out.println("HelloWorld"); ??? } } |
?
4.2.5.? 第五步:構建項目
注意:
| ? ? |
--構建成功
| ? ? |
?
4.3.?? 通過Maven創建Web項目
4.3.1.? 第一步:創建一個Maven項目
| ? |
--創建項目后,報錯信息。提示沒有web.xml
解決方案:
(1).通過<failOnMissingWebXml>標簽忽略web.xml
(2).創建一個web.xml文件
| ? |
?
?
4.3.2.? 第二步:創建web.xml
| ? |
--通過xsd規則文件創建
| ? |
--創建成功后,報錯消失。!!!!
?
選中項目右鍵
?
?
4.3.3.? 第三步:創建一個index.jsp
| ? |
發現,報錯。原因是沒有加入JSP依賴的ServletAPI以及JSP的類庫。
?
4.3.4.? 第四步:通過POM.xml加入依賴的類庫
--依賴的類庫的jar的坐標取哪里找?
答:可以在一下的公有倉庫找。
http://mvnrepository.com/
?
http://search.maven.org/
注意:以后我們開發出來的功能組件希望讓別人通過Maven使用,也可以提交到這兩個用于庫
?
| <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>cn.zj</groupId> ??? <artifactId>maven-demo-02-web</artifactId> ??? <version>0.0.1-SNAPSHOT</version> ??? <packaging>war</packaging> ? ??? <!-- 增加web項目依賴的類庫 --> ??? <dependencies> ??????? <!-- servlet api --> ? ??????? <dependency> ??????????? <groupId>javax.servlet</groupId> ??????????? <artifactId>javax.servlet-api</artifactId> ??????????? <version>3.0.1</version> ????????????? <scope>provided</scope> ??????? </dependency> ??????? ??????? <!-- jsp --> ? ??????? <dependency> ??????????? <groupId>javax.servlet.jsp</groupId> ??????????? <artifactId>javax.servlet.jsp-api</artifactId> ??????????? <version>2.2.1</version> ????????????? <scope>provided</scope> ??????? </dependency> ??? </dependencies> </project> |
注意事項,創建Maven項目是報異常,可以強制更新項目
--右擊項目-->選擇Maven-->Update Project
| ? |
--強制更新
| ? |
?
?
?
?
4.3.5.? 第五步:通過Maven運行Tomcat啟動項目
-1.安裝tomcat7的Maven插件
?
所有的Maven工具內置插件都是有在https://maven.apache.org/plugins/index.html找到。
| ? |
?
--安裝2.2 版本
| ? |
| 在pom.xml 配置配置tomcat插件 <!-- 構建項目的相關環境 --> ??? <build> ???????? <plugins> ???????????? <!-- tomcat運行插件 --> ???????????? <plugin> ????????????????? <groupId>org.apache.tomcat.maven</groupId> ????????????????? <artifactId>tomcat7-maven-plugin</artifactId> ????????????????? <version>2.2</version> ???????????? </plugin> ???????? </plugins> ??? </build> |
4.3.6.? 使用Tomcat插件運行Maven項目
點擊項目鼠標右鍵
| ? |
4.3.7.? Maven下面Tomcat插件 項目細節配置
Tomvat 默認項目上下文路徑是項目名稱,默認端口是 8080
開發者可以手動配置插件信息
| ??? <build> ???????? <!-- 插件 --> ???????? <plugins> ???????????? <!-- tomcat 插件 --> ???????????? <plugin> ????????????????? <groupId>org.apache.tomcat.maven</groupId> ????????????????? <artifactId>tomcat7-maven-plugin</artifactId> ????????????????? <version>2.2</version> ????????????????? <!-- 細節配置 --> ????????????????? <configuration> ????????????????????? <!-- 上下文路徑 --> ????????????????????? <path>/maven</path> ????????????????????? <!-- 端口配置 --> ????????????????????? <port>80</port> ????????????????? </configuration> ???????????? </plugin> ???????? </plugins> ??? </build> |
5.? 修改jre 依賴版本
Maven 默認依賴的jar版本是 1.5,開發者可以配置jre版本,有兩種配置方式
?
5.1.?? 單獨為某一個項目配置
| <build> ??? <!-- 插件 --> ??? <plugins> ???????? <!-- tomcat 插件 --> ???????? <plugin> ???????????? <groupId>org.apache.tomcat.maven</groupId> ???????????? <artifactId>tomcat7-maven-plugin</artifactId> ???????????? <version>2.2</version> ???????????? <!-- 細節配置 --> ???????????? <configuration> ????????????????? <!-- 上下文路徑 --> ????????????????? <path>/maven</path> ????????????????? <!-- 端口配置 --> ????????????????? <port>80</port> ???????????? </configuration> ???????? </plugin> ???????? <plugin> ???????????? <groupId>org.apache.maven.plugins</groupId> ???????????? <artifactId>maven-compiler-plugin</artifactId> ???????????? <configuration> ????????????????? <!-- 源代碼版本 --> ????????????????? <target>1.8</target> ????????????????? <!-- 編譯后版本? --> ???????????? ??? <source>1.8</source> ???????????? </configuration> ???????? </plugin> ??? </plugins> </build> ? |
5.2.?? 修改setting.xml配置文件
可以修改? maven根/confg/setting.xml 在 <profiles> 標簽中添加如下代碼,使用此種方式全局生效
以后創建的項目全部都是1.8版本
| <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> |
?
?
6.? 通過Maven創建多個工程組成的項目
需求:使用Maven項目創建一個ssm整合的項目。項目的每一層為一個工程。
?
6.1.?? 第一步:創建Maven項目
注意:
6.1.1.? 創建parent-項目
| ? |
6.1.2.? 創建聚合項目的子模塊項目
| ? |
?
6.1.3.? 最終效果
| ? |
?
6.2.?? 第二步:Eclipse實現項目分組
(1)? .將項目列表使用Working Sets顯示
| ? |
?
(2)? .插件一個項目分組
| ? |
?
(3)設置項目組信息
| ? |
--分組后結果
| ? |
?
6.3.?? 第三步:聚合項目后的效果
--聚合所有需要構建的工程,可以實現統一構建項目。所謂的統一構建項目,就是統一的執行清除、測試、編譯、打包等操作
--在聚合項目ssm-parent通過 <modules>實現聚合所有的需要統一構建的項目
| ? |
?
--代碼
| <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>cn.zj</groupId> ? <artifactId>ssm-parent</artifactId> ? <version>0.0.1-SNAPSHOT</version> ? <packaging>pom</packaging> ? <description>這是一個聚合項目,本身至于維護其它子項目的包關系插件等</description> ? ? <!-- 通過引入模塊的形式,將項目的其他模塊引入在一起 --> ? <modules> ? <module>ssm-mapper</module> ? <module>ssm-service</module> ? <module>ssm-pojo</module> ? <module>ssm-web</module> ? <module>ssm-util</module> ? </modules> </project> |
?
6.4.?? 第四步:項目的繼承
注意:所謂的項目繼承,就是一個項目已經在pom.xml聲明的各種元素,繼承的子工程的pom.xml也獲得該父工程的pom.xml所有聲明的元素。
?
前提:以前如果每個工程需要使用Log4J和Junit,都要在各自的項目的pom.xml加入依賴。這樣做他麻煩了。
需求:在ssm-parent聲明一次依賴Log4J和Junit,其他所有的子工程都可以使用。
?
(1)在父包加入了依賴
| ? |
?
(2)在子項目繼承父工程。也獲得了父工程聲明的元素
| ? |
?
6.5.?? 第五步:依賴包的版本統一管理
需求:實現所有項目依賴的類庫的版本統一管理。
?
答:可以通過屬性的設置與版本鎖定,使用依賴包的統一管理
(1)父項目,設置屬性與版本鎖定
| <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>cn.zj.parent</groupId> ??? <artifactId>ssm-parent</artifactId> ??? <version>0.0.1-SNAPSHOT</version> ??? <packaging>pom</packaging> ??? <description>這是一個聚合項目,本身至于維護其它子項目的包關系插件等</description> ? ??? <!-- 通過屬性設置類庫版本 --> ??? <!-- 在properties標簽聲明的屬性,可以在作用范圍內的pom.xml里面使用${標簽名}訪問 --> ??? <properties> ??????? <!-- 注意:pom里面的屬性值,標簽名是自定義的,隨便寫,只有符合xml標簽規范 --> ??????? <log4j.version>1.2.17</log4j.version> ??????? <junit.version>4.12</junit.version> ??????? <springmvc.version>4.3.16.RELEASE</springmvc.version> ??? </properties> ??? <!-- 聲明依賴 --> ??? <dependencies> ??????? <dependency> ??????????? <groupId>log4j</groupId> ??????????? <artifactId>log4j</artifactId> ??????????? <version>${log4j.version}</version> ??????????? <!-- 打包的時候需要一起進去 --> ??????????? <scope>compile</scope> ??????? </dependency> ??????? <dependency> ??????????? <groupId>junit</groupId> ??????????? <artifactId>junit</artifactId> ??????????? <version>${junit.version}</version> ??????????? <!-- Junit打包的時候是不能放在包里面的 --> ??????????? <scope>test</scope> ??????? </dependency> ??? </dependencies> ? ??? <!-- 指定可以選擇的依賴庫的版本 --> ??? <!-- 放在dependencyManagement標簽里面的依賴庫,并沒有被使用,只是聲明了,可選.版本鎖定 ??? ?這個意味著,如果在作用范圍內(本pom.xml以及子pom.xml)里面使用到dependencyManagement標簽 ??? ?指定版本的類庫,必須在在指定版本 ??? ?--> ??? <dependencyManagement> ??????? <dependencies> ??????????? <dependency> ??????????????? <groupId>org.springframework</groupId> ??????????????? <artifactId>spring-webmvc</artifactId> ??????????????? <version>${springmvc.version}</version> ??????????? </dependency> ??????? </dependencies> ??? </dependencyManagement> ??? <!-- 通過模塊的方式,將所有統一構建的項目聚合起來 --> ??? <modules> ??????? <module>ssm-web</module> ??????? <module>ssm-service</module> ??????? <module>ssm-mapper</module> ??????? <module>ssm-pojo</module> ??????? <module>ssm-utils</module> ??? </modules> </project> |
?
(2)子項目,不需要再指定版本鎖定的類庫的版本
| <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>cn.zj.controller</groupId> ? <artifactId>ssm-web</artifactId> ? ? <packaging>war</packaging> ? ? <!-- 繼承ssm parent項目 --> ? <parent> ??? <groupId>cn.zj.parent</groupId> ??? <artifactId>ssm-parent</artifactId> ??? <!-- 注意:如果一個多工程的項目,繼承了統一的父項目,版本號以父項目為準 --> ??? <version>0.0.1-SNAPSHOT</version> ??? ? </parent> ? ? ? <dependencies> ? <dependency> ? ? <groupId>org.springframework</groupId> ? ? <artifactId>spring-webmvc</artifactId> ? ? </dependency> ? </dependencies> ? </project> |
6.5.1.? 依賴<scope>的范圍
Scope 聲明依賴包在哪個階段有效
Compile(默認)? spring,mybatis編譯(compile)時需要 測試時需要,,運行時需要,打包時需要 Provided? jsp-api.jar?? servlet-api.jar編譯(compile)時需要,測試(test)時也需要 ,運行時不需要,打包時不需要 ? Runtime?? 數據庫驅動包編譯時不需要,測試時需要,,運行時需要,打包時需要 Test? junit.jar編譯時不需要,測試時需要,運行時不需要,打包也不需要 ? |
?
6.6.?? 第六步:在ssm-web工程配置SpringMVC框架
6.6.1.? 導入包依賴
--在ssm-parent對依賴包版本鎖定
| <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>cn.zj.parent</groupId> ??? <artifactId>ssm-parent</artifactId> ??? <version>0.0.1-SNAPSHOT</version> ??? <packaging>pom</packaging> ??? <description>這是一個聚合項目,本身至于維護其它子項目的包關系插件等</description> ? ??? <!-- 通過屬性設置類庫版本 --> ??? <!-- 在properties標簽聲明的屬性,可以在作用范圍內的pom.xml里面使用${標簽名}訪問 --> ??? <properties> ??????? <!-- 注意:pom里面的屬性值,標簽名是自定義的,隨便寫,只有符合xml標簽規范 --> ??????? <log4j.version>1.2.17</log4j.version> ??????? <junit.version>4.12</junit.version> ??????? <springmvc.version>4.3.16.RELEASE</springmvc.version> ??????? <servlet-api.version>3.0.1</servlet-api.version> ??????? <jsp.version>2.2.1</jsp.version> ??? </properties> ? ? ??? <!-- 聲明依賴 --> ? ??? <dependencies> ??????? <dependency> ??????????? <groupId>log4j</groupId> ??????????? <artifactId>log4j</artifactId> ??????????? <version>${log4j.version}</version> ??????????? <!-- 打包的時候需要一起進去 --> ??????????? <scope>compile</scope> ??????? </dependency> ? ? ??????? <dependency> ??????????? <groupId>junit</groupId> ??????????? <artifactId>junit</artifactId> ??????????? <version>${junit.version}</version> ??????????? <!-- Junit打包的時候是不能放在包里面的 --> ??????????? <scope>test</scope> ??????? </dependency> ? ? ??? </dependencies> ? ??? <!-- 指定可以選擇的依賴庫的版本 --> ??? <!-- 放在dependencyManagement標簽里面的依賴庫,并沒有被使用,只是聲明了,可選.版本鎖定 這個意味著,如果在作用范圍內(本pom.xml以及子pom.xml)里面使用到dependencyManagement標簽 ??????? 指定版本的類庫,必須在在指定版本 --> ??? <dependencyManagement> ??? ??? <dependencies> ??????????? <dependency> ??????????????? <groupId>org.springframework</groupId> ??????????????? <artifactId>spring-webmvc</artifactId> ??????????????? <version>${springmvc.version}</version> ??????????? </dependency> ? ??????????? <dependency> ??????????????? <groupId>javax.servlet</groupId> ??????????????? <artifactId>javax.servlet-api</artifactId> ??????????????? <version>${servlet-api.version}</version> ??????????????? <scope>provided</scope> ??????????? </dependency> ??????????? ??????????? <dependency> ??????????????? <groupId>javax.servlet.jsp</groupId> ??????????????? <artifactId>javax.servlet.jsp-api</artifactId> ??????????????? <version>${jsp.version}</version> ??????????????? <scope>provided</scope> ??????????? </dependency> ? ??????? </dependencies> ? ??? </dependencyManagement> ? ??? <!-- 設置構建是的jdk的版本 --> ??? <build> ??????? <!-- 插件就是Maven命令 --> ??????? <plugins> ??????????? <!-- 修改編譯插件的JDK版本 --> ??????????? <plugin> ??????????????? <groupId>org.apache.maven.plugins</groupId> ??????????????? <artifactId>maven-compiler-plugin</artifactId> ??????????????? <version>3.5</version> ??????????????? <!-- 配置屬性 --> ??????????????? <configuration> ?????????????????? <!-- 源代碼使用JDK1.8 --> ?????????????????? <source>1.8</source> ?????????????????? <!-- 生成的目標文件.class文件使用JDK1.8 --> ?????????????????? <target>1.8</target> ??????????????? </configuration> ??????????? </plugin> ??????? </plugins> ??? </build> ? ??? <!-- 通過模塊的方式,將所有統一構建的項目聚合起來 --> ? ??? <modules> ??????? <module>ssm-web</module> ??????? <module>ssm-service</module> ??????? <module>ssm-mapper</module> ??????? <module>ssm-pojo</module> ??????? <module>ssm-utils</module> ? ??? </modules> </project> |
?
--在ssm-web的pom.xml導入依賴包
| <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>cn.zj.controller</groupId> ??? <artifactId>ssm-web</artifactId> ? ??? <packaging>war</packaging> ? ??? <!-- 繼承ssm parent項目 --> ??? <parent> ??????? <groupId>cn.zj.parent</groupId> ??????? <artifactId>ssm-parent</artifactId> ??????? <!-- 注意:如果一個多工程的項目,繼承了統一的父項目,版本號以父項目為準 --> ??????? <version>0.0.1-SNAPSHOT</version> ??????? <!-- 指定父工廠的pom.xml相對本pom.xml的相對路徑 --> ??????? ??? </parent> ? ??? <!-- 增加依賴包 --> ? ??? <dependencies> ? ??????? <dependency> ??????????? <groupId>org.springframework</groupId> ??????????? <artifactId>spring-webmvc</artifactId> ? ??????? </dependency> ? ??????? <!-- servlet api --> ??????? <dependency> ??????????? <groupId>javax.servlet</groupId> ??????????? <artifactId>javax.servlet-api</artifactId> ??????? </dependency> ? ??????? <!-- jsp --> ??????? <dependency> ??????????? <groupId>javax.servlet.jsp</groupId> ??????????? <artifactId>javax.servlet.jsp-api</artifactId> ??????? </dependency> ??? </dependencies> ? ??? <!-- 運行tocmat7插件 --> ??? <build> ??????? <plugins> ??????? ??????????? <plugin> ??????????????? <groupId>org.apache.tomcat.maven</groupId> ??????????????? <artifactId>tomcat7-maven-plugin</artifactId> ??????????????? <version>2.2</version> ??????????? </plugin> ??????? </plugins> ??? </build> ? </project> |
?
?
6.6.2.? 創建一個請求頁面
| <%@ page language="java" contentType="text/html; charset=UTF-8" ??? pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ?? <a href="${pageContext.request.contextPath }/user/add.do">add</a> </body> </html> |
?
6.6.3.? 編寫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" ??? 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"> ? ??? <!-- 配置SpringMVC的前端控制器(總控) --> ??? <servlet> ???????? <servlet-name>MVC</servlet-name> ???????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> ? ???????? <!-- 讀取Spring相關配置文件 --> ???????? <init-param> ???????????? <param-name>contextConfigLocation</param-name> ???????????? <!-- 因為spring相關配置文件可能有多個,所有使用*號通配符全部掃描 --> ???????????? <param-value>classpath:applicationContext*.xml</param-value> ???????? </init-param> ? ???????? <!-- 初始化容器 --> ???????? <load-on-startup>1</load-on-startup> ? ??? </servlet> ??? <servlet-mapping> ???????? <servlet-name>MVC</servlet-name> ???????? <url-pattern>*.do</url-pattern> ??? </servlet-mapping> ? </web-app> |
?
6.6.4.? 編寫配置文件spring-mvc.xml
| ?<!-- 配置包掃描 --> ??? <context:component-scan base-package="cn.zj.ssm"/> <!-- 開啟注解驅動 --> ??? <mvc:annotation-driven /> ??? <!-- 配置視圖解析器 --> ??? <bean ???????? class="org.springframework.web.servlet.view.InternalResourceViewResolver"> ???????? <!-- 配置視圖跳轉的前綴 --> ???????? <property name="prefix" value="/WEB-INF/views/" /> ???????? <!-- 配置視圖跳轉的后綴 --> ???????? <property name="suffix" value=".jsp" /> ??? </bean> ? |
?
6.6.5.? 編寫Controller組件類
| package cn.zj.controller; ? import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; ? @Controller @Scope(value="request") @RequestMapping(value="/user") public class StudentController { ??? ??? @RequestMapping(value="/add") ??? public void add(){ ??????? System.out.println("-增加用戶-"); ??? } ? } ? |
6.7.?? 第七步:在ssm-mapper工程配置Mybatis框架
6.7.1.? 導入包依賴
--ssm-mapper項目導入依賴
| <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>cn.zj.mapper</groupId> ? <artifactId>ssm-mapper</artifactId> ? <parent> ? ? <groupId>cn.zj.parent</groupId> ? ? <artifactId>ssm-parent</artifactId> ? ? <version>0.0.1-SNAPSHOT</version> ? ? ? </parent> ? ? <dependencies> ????? ??? ?<!-- jdbc driver --> ? ??? ?<dependency> ??? ??? <groupId>mysql</groupId> ??? ??? <artifactId>mysql-connector-java</artifactId> ??? ?</dependency> ??? ? ??? ?<!-- mybatis --> ? ??? ?<dependency> ??? ??? <groupId>org.mybatis</groupId> ??? ??? <artifactId>mybatis</artifactId> ??? ?</dependency> ??? ? ??? ?<!-- ssm-mapper項目依賴ssm-pojo項目 --> ??? ?<dependency> ??? ??? <groupId>cn.zj.pojo</groupId> ??? ??? <artifactId>ssm-pojo</artifactId> ??? ??? <version>0.0.1-SNAPSHOT</version> ??? ?</dependency> ??? ? ??? ?<!-- dbcp --> ??? ?<dependency> ??? ??? <groupId>org.apache.commons</groupId> ??? ??? <artifactId>commons-dbcp2</artifactId> ??? ?</dependency> ??? ? ? </dependencies> ? ? </project> |
6.7.2.? 創建操作映射注解
--創建一個操作接口,編寫一個插入數據的SQL語句
| package cn.zj.mapper; ? import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; ? import cn.zj.pojo.User; ? public interface StudentMapper { ??? ??? @Insert(value="INSERT INTO t_user? (name, phone, email)?? VALUES (#{name}, #{phone}, #{email})") ??? //操作后,實體對象需要ID,使用ID回填 ??? @Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id") ??? int insert(User user); ? } |
?
6.7.3.? 編寫mybatis-config.xml配置文件
?
在test/resources創建mybatis-config.xml配置文件
| ? |
?
--配置文件代碼
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > <configuration> ? ?? <environments default="mysql"> ???? <environment id="mysql"> ?????? <transactionManager type="JDBC"></transactionManager> ?????? <dataSource type="POOLED"> ????????? <property name="driver" value="com.mysql.jdbc.Driver"/> ????????? <property name="url" value="jdbc:mysql://localhost:3306/sms"/> ????????? <property name="username" value="root"/> ????????? <property name="password" value="admin"/> ?????? </dataSource> ???? </environment> ?? </environments> ?? <!-- 加載映射接口 --> ?? <mappers> ????? <mapper class="cn.zj.mapper.UserMapper"/> ?? </mappers> </configuration> ? |
?
6.7.4.? 測試代碼
| package cn.zj.test; import java.io.IOException; import java.io.Reader; ? import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; ? import cn.zj.mapper.UserMapper; import cn.zj.pojo.User; ? public class UserMapperTest { ??? ??? @Test ??? public void insert(){ ??????? ??????? ??????? try { ??????????? //1.獲得配置文件 ??????????? Reader reader = Resources.getResourceAsReader("mybaits-config.xml"); ??????????? //2.通過SqlSessionFactoryBuilder獲得SqlSessionFactory對象 ??????????? SqlSessionFactoryBuilder build=new SqlSessionFactoryBuilder(); ??????????? //獲得會話工廠 ??????????? SqlSessionFactory sessionFactory = build.build(reader); ??????????? //獲得會話 ??????????? SqlSession session = sessionFactory.openSession(); ??????????? //獲得操作接口的動態對象 ??????????? UserMapper mapper = session.getMapper(UserMapper.class); ??????????? User user=new User(); ??????????? user.setName("王五"); ??????????? int count = mapper.insert(user); ??????????? System.out.println(count); ??????????? //提交 ??????????? session.commit(); ??????????? session.close(); ??????????? System.out.println(user.getStuId()); ??????? } catch (IOException e) { ??????????? // TODO Auto-generated catch block ??????????? e.printStackTrace(); ??????? } ??? } } ? |
?
6.8.?? 第八步:整合SpringMVC與Mybatis
?
6.8.1.? 配置支持支持${key}獲得Properties文件值
| <!-- 讀取db.properties數據庫配置文件 --> <context:property-placeholder location="classpath:db.properties"/> ? <!-- 配置Druid連接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" ??? init-method="init" destroy-method="close"> ??? <!-- setter方法注入屬性值 --> ??? <property name="driverClassName" value="${jdbc.driverClassName}" /> ??? <property name="url" value="${jdbc.url}" /> ??? <property name="username" value="${jdbc.username}" /> ??? <property name="password" value="${jdbc.password}" /> ??? <!-- 最大連接數 --> ??? <property name="maxActive" value="${jdbc.maxActive}" /> </bean> |
?
6.8.2.? 整合Mybatis
| <!-- 配置MyBatis的 SqlSessionFactory對象 --> ??? <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> ???????? <!-- 1. 注入數據源:連接池 --> ???????? <property name="dataSource" ref="dataSource"/> ???????? ???????? <!-- 2.使用包掃描配置別名 --> ???????? <property name="typeAliasesPackage" value="cn.zj.ssm.pojo"/> ???????? ???????? <!-- 3.引入MyBatis配置文件 mybatis-confg.xml --> ???????? <property name="configLocation" value="classpath:mybatis-config.xml"/> ???????? ???????? <!-- 4.配置映射文件 --> ???????? <property name="mapperLocations" value="classpath:cn/zj/ssm/dao/*Mapper.xml"></property> ??? </bean> ??? <!-- 使用包掃描配置Mapper接口對應的代理對象 ???????? 對應包下面的所有的接口全部會被創建代理對象, 默認都是 接口名的首字母小寫 作為 名稱 UserMapper->userMapper ??? ?--> ??? ?<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> ??? ??? <!-- 配置SqlSessionfactory的bean對應的名稱(不是對象) --> ??? ??? <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> ??? ??? ??? ??? <!-- 配置需要掃描創建代理對象的包 --> ??? ??? <property name="basePackage" value="cn.zj.ssm.dao"/> ??? ?</bean> |
?
6.8.3.? 配置事物管理器
| <!-- 配置MyBatis事物管理器 --> ??? <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> ???????? <!-- 1. 注入數據源:連接池 --> ???????? <property name="dataSource" ref="dataSource"/> ??? </bean> ??? ??? ??? <!-- 配置事務 通知(增強) tx --> ??? <tx:advice id="txAdvice" transaction-manager="txManager"> ???????? <!-- 配置事務方法 --> ???????? <tx:attributes> ???????????? <tx:method name="find*" read-only="true"/> ???????????? <tx:method name="get*" read-only="true"/> ???????????? <tx:method name="query*" read-only="true"/> ???????????? <tx:method name="select*" read-only="true"/> ???????????? <tx:method name="list*" read-only="true"/> ???????????? <!-- 需要事務的方法 --> ???????????? <tx:method name="*"/> ???????? </tx:attributes> ??? </tx:advice> ??? ??? <!-- 使用aop切事務 --> ??? <aop:config> ???????? <!-- 配置切入點 --> ???????? <aop:pointcut expression="execution (* cn.zj.ssm.service..*.*(..))" id="pt"/> ???????? ???????? <!-- 配置切面 = 切入點+ 通知 --> ???????? <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/> ???????? <!-- 織入: spring完成 --> ??? </aop:config> |
?
7.? 常見問題
問題1:已經下載到本地倉庫的jar。Eclipse如何快速加入到Pom.xml文件里面
答:進入POM.xml對應的標簽位置,右擊選擇增加依賴或者插件。
--選擇增加的依賴
| ? |
--選擇需要的依賴
| ? |
?
?
問題2:本地明明已經下載了對應的插件或者jar包。但Eclipse工具搜索不出來.
答:原因是緩沖問題。可以清一下倉庫索引,操作步驟
--打開Maven倉庫管理窗口
| ? |
--刷新索引緩存
| ? |
?
問題3:如何設置默認的JDK版本
| ??? <!-- 設置構建是的jdk的版本 --> ??? <build> ??????? <!-- 插件就是Maven命令 --> ??????? <plugins> ??????????? <!-- 修改編譯插件的JDK版本 --> ??????????? <plugin> ??????????????? <groupId>org.apache.maven.plugins</groupId> ??????????????? <artifactId>maven-compiler-plugin</artifactId> ??????????????? <version>3.5</version> ??????????????? <!-- 配置屬性 --> ??????????????? <configuration> ?????????????????? <!-- 源代碼使用JDK1.8 --> ?????????????????? <source>1.8</source> ?????????????????? <!-- 生成的目標文件.class文件使用JDK1.8 --> ?????????????????? <target>1.8</target> ??????????????? </configuration> ??????????? </plugin> ??????? </plugins> ??? </build> |
?
問題4:設置打包安裝跳過Junit的測試
| ??????? <!-- 跳過測試代碼 --> ??????????? <plugin> ??????????????? <groupId>org.apache.maven.plugins</groupId> ??????????????? <artifactId>maven-surefire-plugin</artifactId> ??????????????? <version>2.18.1</version> ??????????????? <configuration> ??????????????? ? <skipTests>true</skipTests> ??????????????? </configuration> ??????????? </plugin> |
?
?
8.? 小結
Maven是什么?
Maven是一個項目構建工具
1,編譯--測試-打包-安裝 完全使用Maven即可完成
2,Maven完全負責項目依賴包管理
3,Maven內置集成Tomcat插件
?
Maven相對手動構建項目優勢
1. Maven有依賴倉庫,基本上擁有市面上所有的jar包
(1)???? 更加方便jar包版本管理
2. 互聯網各大開源的項目基本都是使用Maven項目構建
3. 后面會講解SpringBoot(必須使用Maven)
?
?
目前項目構建工具除了 Maven,還有一個項目構建工具Gradle
轉載于:https://www.cnblogs.com/shenzhenhuicnblogs/p/11171984.html
總結
以上是生活随笔為你收集整理的Maven项目整合讲义(Eclipse版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity游戏框架学习-框架结构
- 下一篇: spring第一个小例子(Spring_