maven
一搪哪、maven基礎(chǔ)
1. maven的核心
- 依賴管理:對jar包管理的過程
- 項目構(gòu)建:項目在編碼完成后巡扇,對項目進行編譯、測試炊琉、打包展蒂、部署
2. maven安裝、配置本地倉庫
2.1. maven下載安裝
- Maven 下載地址:http://maven.apache.org/download.cgi
- 解壓到本地磁盤(目錄不能有空格)
- 設(shè)置 Maven 環(huán)境變量
- 必須先安裝jdk温自,配置JAVA_HOME
- 新建系統(tǒng)變量 MAVEN_HOME玄货,變量值:
E:\Maven\apache-maven-3.3.9
- 編輯系統(tǒng)變量 Path,添加變量值:
;%MAVEN_HOME%\bin
- 查看maven版本信息悼泌,驗證是否已成功安裝
- 執(zhí)行
mvn -v
- 執(zhí)行
2.2. 配置本地倉庫
2.2.1. 倉庫類型:
? 本地倉庫(local)松捉、遠程倉庫(remote(私服))、中央倉庫(central(Maven 社區(qū)維護))
2.2.2. 配置本地倉庫
- 解壓jar包壓縮包到本地磁盤
- 配置本地倉庫路徑馆里,修改默認位置隘世,在
%MAVEN_HOME%\conf
目錄中的 Maven 的settings.xml
文件中配置<localRepository>
路徑可柿。
3. maven項目標準目錄結(jié)構(gòu)
4. maven的常用命令:
dos窗口進入項目pox.xml所在目錄,執(zhí)行命令:mvn tomcat:run
4.1. maven 常用命令
-
clean
:清除項目根目錄下target文件夾內(nèi)所有內(nèi)容 -
compile
:編譯丙者,將項目中的java文件編譯為class文件 -
test
:單元測試复斥,將項目根目錄下src/java目錄下的單元測試類都會執(zhí)行
單元測試類名要求:***Test.java -
package
:打包
web project ==>war包
java project ==>jar包
將項目打包,打包項目根目錄下target 目錄 -
install
:安裝
本地多個項目公用一個jar包械媒,打包到本地倉庫
-
4.2. maven項目的生命周期
- CleanLifeCycle:清理生命周期:clean
- defaultLifeCycle:默認生命周期:compile目锭、test、package纷捞、install痢虹、deploy
- siteLifeCycle:站點生命周期:site
-
三套生命周期相互獨立,互不影響主儡。
在一套生命周期內(nèi)奖唯,執(zhí)行后面的命令,前面操作會自動執(zhí)行糜值。
4.3 概念模型
5. maven整合web項目
5.1. 配置maven插件
5.1.1 新版的eclipse自帶maven插件
5.1.2 配置maven程序
5.1.3 配置userSetting
5.1.4 構(gòu)建索引
注意配置本地倉庫地址
5.2. maven整合Servlet
5.2.1 創(chuàng)建maven項目
5.2.2 創(chuàng)建好web項目產(chǎn)生的錯誤
-
web.xml缺失
-
- jdk編譯版本為1.5,在pom.xml中添加插件
<!-- 添加項目jdk編譯插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
-
創(chuàng)建一個Servlet,servlet編譯報錯寂汇,原因:缺失servlet-api-**.jar包
-
-
查找依賴
-
5.3. 依賴的范圍
添加依賴范圍:默認是compile
provided:運行部署到tomcat不再需要病往。
-
問題:如果將servlet-api.jar設(shè)置為compile,打包之后包含servlet-api.jar,war包部署到tomcat后跟tomcat中存在的servlet-api.jar包沖突健无。導(dǎo)致運行失敗荣恐。
解決:修改依賴范圍
- 依賴作用范圍
依賴范圍 | 對于編譯classpath有效 | 對于測試classpath有效 | 對于運行時classpath有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-corer |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驅(qū)動 |
system | Y | Y | - | 本地的,Maven倉庫之外的類庫 |
- 總結(jié):如果使用到tomcat自帶jar包累贤,將項目中依賴作用范圍設(shè)置為:provided
5.4 運行叠穆、調(diào)試項目
5.5 maven整合struts2
5.5.1 通過工具生成web.xml及添加編譯jdk版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<!-- 手動設(shè)置詳細信息 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
5.5.2 添加struts2的依賴
添加核心包,自動添加其他依賴包
5.5.3 創(chuàng)建struts.xml
5.5.4 創(chuàng)建action類繼承ActionSupport類
5.5.5 在web.xml中配置Struts2框架核心過濾器
<!-- 配置Struts2框架核心過濾器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern> <!-- .action或者空白結(jié)尾的會經(jīng)過過濾器 -->
</filter-mapping>
5.5.6 編寫action中的方法
//url http://localhost:8080/maven-struts2/customerAction_test.action
public String test() throws Exception {
System.out.println("成功進入CustomerAction中的test方法");
return SUCCESS;
}
5.5.7 在struts.xml中配置action
<package name="demo" namespace="/" extends="struts-default">
<action name="customerAction_*" class="com.zhougl.web.action.CustomerAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
</package>
二臼膏、Maven實戰(zhàn)
1.傳遞依賴沖突解決
1.1Maven自己調(diào)解原則
1.1.1 第一聲明優(yōu)先原則
誰先定義就用誰優(yōu)先傳遞依賴
1.1.2 路徑近者優(yōu)先原則
直接依賴級別高于傳遞依賴硼被。
1.2 排除依賴
1.3 版本鎖定(推薦使用)
1.4 配置文件中的屬性引用
在配置文件中定義屬性,使用ognl表達式引用屬性值
2. ssh配置文件加載過程
3.通過maven整合ssh框架
3.1 ssh框架所需要的jar包
3.1.1 主要jar包及關(guān)系
- struts2-spring-plugin
- spring-orm
- aspectjweaver
- hibernate-core
- hibernate-c3p0
依賴 | 簡述 |
---|---|
struts2-spring-plugin(2.5.12) |
Spring 集成Struts2 所需包渗磅,此系列包會幫你下載struts2 和spring(4.1.6) 相關(guān)基礎(chǔ)jar包,加一個struts2-spring-plugin(2.5.12).jar 包嚷硫。(所以,加入這個依賴之后始鱼,maven會幫你下載struts2 和spring 基礎(chǔ)包仔掸,自己不用再添加加Struts2 和spring 的依賴了。而我又添加了spring-context-4.3.10.RELEASE 的原因下面細說医清。) |
spring-context(4.3.10) | 會幫你下載spring基礎(chǔ)jar包: (加此依賴的原因:可能是因為hibernate5 起暮,版本過高與spring.4.1.6 不兼容吧,出現(xiàn)java.lang.NoClassDefFoundError: org/springframework/core/ResolvableTypeProvider 異常会烙,spring 在4.2版本新加了一個公共接口ResolvableTypeProvider 负懦,在使用spring-orm 中的hibernate5 相關(guān)類需要用到此接口筒捺。所以spring 用4.2之后的新版本。添加不同版本的dependency 纸厉,后面添加的會無效) |
spring-orm |
Spring 集成Hibernate 所需包系吭,內(nèi)中包含spring 使用hibernate 所需相關(guān)類。 |
aspectjweaver.jar |
SpringAop 所依賴的包颗品,spring AoP 就是用aspectj 來實現(xiàn)的肯尺,是依賴關(guān)系!AspectJ 是動態(tài)代理的一種實現(xiàn)抛猫!spring 默認使用的就是AspectJ 來實現(xiàn)的動態(tài)代理蟆盹。 |
spring-aspects |
spring-aspects 直接依賴于aspectjweaver.jar ,所以引入該包統(tǒng)一版本 |
hibernate-core |
Hibernate 核心包。hibernate5 與hibernate4 相比闺金,區(qū)別不少(使用需謹慎!) |
hibernate-c3p0 | 配置Mysql-c3p0 數(shù)據(jù)源和連接池所需包 |
3.1.2 pom.xml最終配置
<!-- 屬性 -->
<!-- struts的版本 ==> spring的版本4.3.13 ==> hibernate的版本 -->
<properties>
<!-- 統(tǒng)一源碼的編碼方式 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 統(tǒng)一各個框架版本 -->
<struts.version>2.5.10</struts.version>
<spring.version>4.3.10.RELEASE</spring.version>
<hebernate.version>5.1.7.Final</hebernate.version>
</properties>
<build>
<plugins>
<!-- 統(tǒng)一源代碼編譯輸出的JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<!-- 設(shè)置詳細信息 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<!-- 版本鎖定:指定項目中依賴的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Struts2和Spring整合依賴 包含struts2和spring基礎(chǔ)包 -->
<!-- 包含Spring 核心依賴 Spring web依賴 Struts2 核心依賴 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- spring基礎(chǔ)jar包 4.2之后的新版本支持hibernate5 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring web依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring整合ORM框架依賴 Spring集成Hibernate所需包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringAop所依賴的包 -->
<!-- <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Hibernate核心包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hebernate.version}</version>
</dependency>
<!-- 連接池 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hebernate.version}</version>
</dependency>
<!-- oracle驅(qū)動 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
3.2 搭建struts2環(huán)境
3.2.1 創(chuàng)建struts2配置文件:struts.xml
3.2.2 在web.xml中配置struts2的核心過濾器
<!-- 配置struts核心過濾器 -->
<filter>
<filter-name>struts</filter-name>
<!-- 高版本路徑 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- 低版本路徑 -->
<!-- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> -->
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.3 搭建spring環(huán)境
3.3.1 創(chuàng)建spring配置文件:applicationContext.xml
3.3.2 在web.xml中配置監(jiān)聽器:ContextLoaderListener
<!-- 配置spring監(jiān)聽器 :默認加載WEB-INF/applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 通過上下文參數(shù)指定spring配置文件路徑 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
3.4 搭建Hibernate環(huán)境
3.4.1 創(chuàng)建Hibernate核心配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 配置在控制臺顯示SQL語句 -->
<property name="show_sql">true</property>
<!-- 配置對輸出的SQL語句進行格式化 -->
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">none</property>
<property name="myeclipse.connection.profile">ehrp</property>
<property name="connection.url">jdbc:oracle:thin:@192.168.0.134:1521/ehrp</property>
<property name="connection.username">user_developer</property>
<property name="connection.password">user_developer</property>
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
</session-factory>
</hibernate-configuration>
3.5 struts2跟spring整合
整合要點:action對象創(chuàng)建峰档,交給spring創(chuàng)建
3.5.1 創(chuàng)建action類
3.5.2 將action對象配置到spring文件中
<!-- 配置action 必須配置scope為多實例 -->
<bean id="customerAction" class="com.zhougl.web.action.CustomerAction" scope="prototype">
</bean>
3.5.3 在struts.xml中的action節(jié)點中class屬性配置為spring工廠中action對象bean的id
<package name="demo" namespace="/" extends="struts-default">
<!-- class為spring中action對象bean的id method="{1}"代表是第一個“*”-->
<action name="customerAction_*" class="customerAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
</package>
3.6 spring跟hibernate整合
整合要點:
3.6.1 數(shù)據(jù)源DataSource交給spring
<!-- 加載屬性值 classpath只有spring配置才有-->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置DataSource -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property><!-- 通過ognl表達式來取值是,${user}在linux下取的是用戶名 ${userName}在window下取的是計算機名,都會報錯-->
<property name="password" value="${jdbc.password}"></property>
</bean>
3.6.2 SessionFactory對象交給spring創(chuàng)建
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean>
去掉hibernate.cfg.xml中數(shù)據(jù)庫配置信息
3.6.3 事務(wù)管理
-
- 配置事務(wù)框架:PlatformTransactionManager接口
1.1. jdbc:DataSourceTransactionManager
1.2. Hibernate:HibernateTransactionManager
<!-- xml方式管理事務(wù) start--> <!-- 配置通知:具體增強邏輯 --> <tx:advice id="txAdvice"> <tx:attributes> <!-- 匹配業(yè)務(wù)類中方法名稱 --> <tx:method name="save*"/> <tx:method name="delete*"/> <tx:method name="update*"/> <tx:method name="find*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- 配置aop --> <aop:config> <!-- 配置切點:具體哪些方法要增強(真正被增強的方法) --> <aop:pointcut expression="execution(* com.zhougl.service.*.*(..))" id="cut"/> <!-- 配置切入點 * org.ssh.service.*+.*(..) *:表示方法的作用域掠归,*表示所有 org.ssh.service.*:表示org.ssh.service下的任何包 org.ssh.service.*+:表示org.ssh.service下的任何包及其子包 *(..):*表示任何方法芹啥,(..)表示方法的任何參數(shù) --> <!-- 配置切面:將增強邏輯作用到切點(通知+切點) --> <aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/> </aop:config> <!-- xml方式管理事務(wù) end-->
- 1.3. 注解方式管理事務(wù)
<!-- 注解方式管理事務(wù) start -->
<!-- 1.開啟注解驅(qū)動,2.在service類或者方法上使用注解@Transactional -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 注解方式管理事務(wù) end -->
3.7 需求
在地址欄輸入action請求http://localhost:8080/maven-ssh/phoneUserAction_findOne.action?phoneUserId=1
欢顷,action-service-dao槽棍。完成客戶需求。
3.8 具體實現(xiàn)
3.8.1. 創(chuàng)建客戶實體類抬驴、映射文件炼七、將映射文件引入hibernate核心配置文件中
3.8.2. 創(chuàng)建action、service布持、dao豌拙。完成注入。
- 在類中添加屬性生成set 方法
//serviceImpl
private PhoneUserDao phoneUserDao;
public void setPhoneUserDao(PhoneUserDao phoneUserDao) {
this.phoneUserDao = phoneUserDao;
}
//action
private PhoneUserService phoneUserService;
public void setPhoneUserService(PhoneUserService phoneUserService) {
this.phoneUserService = phoneUserService;
}
-
- 在spring配置文件中完成注入
<!-- 配置dao對象 --> <bean id="phoneUserDao" class="com.zhougl.web.dao.impl.PhoneUserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置service對象 --> <bean id="phoneUserService" class="com.zhougl.web.service.impl.PhoneUserServiceImpl"> <property name="phoneUserDao" ref="phoneUserDao"></property> </bean> <!-- 配置action 必須配置scope為多實例 --> <bean id="phoneUserAction" class="com.zhougl.web.action.PhoneUserAction" scope="prototype"> <property name="phoneUserService" ref="phoneUserService"></property> </bean>
- 在struts.xml配置action题暖,配置結(jié)果視圖
<struts>
<package name="demo" namespace="/" extends="struts-default" strict-method-invocation="false">
<!-- class為spring中action對象bean的id -->
<action name="phoneUserAction_*" class="phoneUserAction" method="{1}" >
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
-
- 新版本jar包可能產(chǎn)生的問題:
-
4.1. struts從2.3.X升級到2.5.18中遇到的問題及解決辦法
- 方法不能訪問的問題按傅,需要在每個action配置文件中加上
strict-method-invocation="false"
:
<!-- Struts2在2.5版本后添加strict-method-invocation(嚴格方法訪問),默認為true胧卤,不能使用動態(tài)方法調(diào)用功能唯绍,故需設(shè)為false --> <package name="demo" namespace="/" extends="struts-default" strict-method-invocation="false">
或者全局配置
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
并修改配置文件頭部為2.5版本的:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
4.2. web.xml中把
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
改為org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
4.3. jdk版本需要1.7+
-
4.4. 如果提交表單出現(xiàn)404,需要將表單提交的路徑改成使用basepath作位前綴:
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- 方法不能訪問的問題按傅,需要在每個action配置文件中加上
-
- maven build默認運行的tomcat版本為6.0枝誊,會產(chǎn)生如下錯誤:
Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: Unable to compile class for JSP:
解決:maven指定tomcat版本 maven build 命令改為tomcat7:run
```xml
<!-- pom.xml中添加tomcat7插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
```
-
- 總結(jié)
- 頁面提交參數(shù)况芒,在服務(wù)端action接收參數(shù) 參
- 調(diào)用業(yè)務(wù)層方法-->dao的方法-->DB 調(diào)
- 將返回的數(shù)據(jù)存值棧 存
- 配置結(jié)果視圖 ,跳轉(zhuǎn)頁面 轉(zhuǎn)
4.通過maven對項目進行拆分侧啼、聚合
對現(xiàn)在已有maven ssh項目進行拆分牛柒,拆分思路:將dao層的代碼堪簿、已經(jīng)配置好的文件全體提取出來到一個表現(xiàn)上獨立的工程中。同樣service皮壁、action拆分椭更。
- ssh-parent:(父工程)
- ssh-dao:(子模塊)
- ssh-service
- ssh-web
- 拆分完成后,對拆分后的項目進行聚合蛾魄,提出概念父工程虑瀑。
4.1 創(chuàng)建父工程
創(chuàng)建好父工程目錄結(jié)構(gòu):只有pom.xml,父工程不進行編碼:
- 項目需要的依賴的信息滴须,在父工程中定義舌狗,子模塊繼承過程。
- 將各個子模塊聚合到一起扔水。
<!-- 屬性 -->
<!-- struts的版本 ==> spring的版本4.3.13 ==> hibernate的版本 -->
<properties>
<!-- 統(tǒng)一源碼的編碼方式 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 統(tǒng)一各個框架版本 -->
<struts.version>2.5.10</struts.version>
<spring.version>4.3.10.RELEASE</spring.version>
<hebernate.version>5.1.7.Final</hebernate.version>
</properties>
<build>
<plugins>
<!-- 統(tǒng)一源代碼編譯輸出的JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<!-- 設(shè)置詳細信息 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 集成Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- <configuration>
<path>/${project.artifactId}</path>
</configuration> -->
</plugin>
<!-- <plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat8-maven-plugin</artifactId>
<version>3.0-r1655215</version>
</plugin> -->
<!-- 打包時跳過單元測試 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<!-- 版本鎖定:指定項目中依賴的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Struts2和Spring整合依賴 包含struts2和spring基礎(chǔ)包 -->
<!-- 包含Spring 核心依賴 Spring web依賴 Struts2 核心依賴 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- spring基礎(chǔ)jar包 4.2之后的新版本支持hibernate5 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring web依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring整合ORM框架依賴 Spring集成Hibernate所需包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringAop所依賴的包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Hibernate核心包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hebernate.version}</version>
</dependency>
<!-- 連接池 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hebernate.version}</version>
</dependency>
<!-- oracle驅(qū)動 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
</dependencies>
4.2 將創(chuàng)建好的父工程發(fā)布到本地倉庫
maven install
忘記此步驟痛侍,將來service、dao工程發(fā)布到本地倉庫魔市,發(fā)布的service主届、dao工程會報錯。
補救措施:將父工程發(fā)布到本地倉庫待德。
4.3 創(chuàng)建子模塊ssh-dao
ssh-dao負責(zé)數(shù)據(jù)訪問層:包含dao相關(guān)代碼&配置文件
將spring的配置文件進行拆分
- applicationContext-basic.xml:項目基礎(chǔ)信息
- applicationContext-dao.xml:dao層bean對象
4.4 創(chuàng)建子模塊ssh-service
在service工程pom.xml添加ssh-dao依賴
4.5 創(chuàng)建子模塊ssh-web
修改spring配置:
<!-- 通過上下文參數(shù)指定spring配置文件路徑 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext-*.xml</param-value>
</context-param>
在ssh-web項目中添加service工程依賴君丁。
4.6 運行方式
maven方式:
方式1:運行父工程。父工程將各個子模塊聚合到一起将宪。將ssh-web打war包發(fā)布到tomcat
方式2:直接運行web工程绘闷。
其他方式:
部署到tomcat
f訪問地址:http://localhost:8080/maven-ssh-web/phoneUserAction_findOne.action?phoneUserId=1
4.6 單元測試
4.6.1. 批量加載spring配置文件
-
classpath:applicationContext-*.xml
加載本項目配置文件
-
-
-
classpath*:spring/applicationContext-*.xml
既要加載本項目中配置文件,還要加載jar包中配置文件
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring/applicationContext-*.xml") public class PhoneUserDaoTest { @Autowired private PhoneUserDao phoneUserDao; @Test public void testFindOne() { this.phoneUserDao.findOne("1"); } }
public class PhoneUserServiceTest { @Test public void testFindOne() { ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("classpath*:spring/applicationContext-*xml"); PhoneUserService phoneUserService = (PhoneUserService) context.getBean("phoneUserService"); phoneUserService.findOne("1"); } }
-
4.6.2. 依賴范圍
A:ssh-service工程
B:ssh-dao工程
C:單元測試
總結(jié):當(dāng)項目中需要的某一個依賴沒有傳遞過來较坛,在自己工程中添加對應(yīng)依賴印蔗。
5.私服
5.1 私服安裝
下載安裝包nexus-2.12.0-01-bundle.zip
加壓到本地磁盤
使用管理員權(quán)限打開dos,執(zhí)行安裝命令
nexus install
安裝私服(bin目錄下)啟動服務(wù)
nexus start
-
找到私服訪問url:
http:localhost:8081/nexus/#welcome
登錄:admin/admin123
5.2 私服倉庫類型
- hosted:宿主倉庫
存放本公司開發(fā)的jar包。正式發(fā)行版(releases)燎潮、測試版(snapshots)喻鳄、第三方(存在版權(quán)問題的-oracle)
- Proxy:代理倉庫
代理中央倉庫、Apache下載測試版本jar包
- Group:組倉庫
講了連接組倉庫确封。包含hosted:宿主倉庫除呵,Proxy:代理倉庫
5.3 上傳jar包到私服上
5.3.1. 在maven目錄下conf/setting.xml認證:配置用戶名密碼
5.3.2. 在將要上傳的項目的pom.xml配置jar包上傳路徑
5.3.3. 執(zhí)行命令發(fā)布項目到私服(上傳)
maven build
deploy
5.4 從私服下載jar包到本地倉庫
5.4.1. 在maven目錄下conf/setting.xml,配置模板
5.4.2. 激活模板<activeProfiles>
6. 總結(jié)
- 使用maven整合ssh框架
- 拆分maven工程
- a) 將每一層代碼&配置文件全部提取到一個獨立的工程
- b)
- 私服
7. Maven的好處
- 不再拷貝jar包爪喘。項目不需要存放jar包颜曾。導(dǎo)致項目源代碼小。
- 使用maven開發(fā)的工程秉剑,如果環(huán)境統(tǒng)一導(dǎo)入別的maven的項目不會報錯泛豪。
- 代碼耦合度進一步降低
- 方便項目進行升級
- 節(jié)省人力成本