maven學(xué)習(xí)筆記(總)

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
      • 查詢maven版本信息
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)

maven項目目錄結(jié)構(gòu)1
maven項目目錄結(jié)構(gòu)2

4. maven的常用命令:

dos窗口進入項目pox.xml所在目錄,執(zhí)行命令:mvn tomcat:run

4.1. maven 常用命令
    1. clean:清除項目根目錄下target文件夾內(nèi)所有內(nèi)容
    2. compile:編譯丙者,將項目中的java文件編譯為class文件
    3. test:單元測試复斥,將項目根目錄下src/java目錄下的單元測試類都會執(zhí)行
      單元測試類名要求:***Test.java
    4. package:打包
      web project ==>war包
      java project ==>jar包
      將項目打包,打包項目根目錄下target 目錄
    5. install:安裝
      本地多個項目公用一個jar包械媒,打包到本地倉庫
4.2. maven項目的生命周期
    1. CleanLifeCycle:清理生命周期:clean
    2. defaultLifeCycle:默認生命周期:compile目锭、test、package纷捞、install痢虹、deploy
    3. siteLifeCycle:站點生命周期:site
  • 三套生命周期相互獨立,互不影響主儡。
    在一套生命周期內(nèi)奖唯,執(zhí)行后面的命令,前面操作會自動執(zhí)行糜值。


    maven的生命周期丰捷,項目構(gòu)建過程
4.3 概念模型
maven概念模型

5. maven整合web項目

5.1. 配置maven插件
5.1.1 新版的eclipse自帶maven插件
5.1.2 配置maven程序
eclipse配置maven插件
5.1.3 配置userSetting
配置userSetting
5.1.4 構(gòu)建索引

注意配置本地倉庫地址


構(gòu)建maven索引
5.2. maven整合Servlet
5.2.1 創(chuàng)建maven項目
1.選擇創(chuàng)建maven項目
2.選擇項目原型
3.maven項目信息
5.2.2 創(chuàng)建好web項目產(chǎn)生的錯誤
    1. web.xml缺失


      補加缺失web.xml
    1. 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>
    1. 創(chuàng)建一個Servlet,servlet編譯報錯寂汇,原因:缺失servlet-api-**.jar包


      缺失jar包
    1. 查找依賴


      查找jar包
5.3. 依賴的范圍

添加依賴范圍:默認是compile
provided:運行部署到tomcat不再需要病往。

  • 問題:如果將servlet-api.jar設(shè)置為compile,打包之后包含servlet-api.jar,war包部署到tomcat后跟tomcat中存在的servlet-api.jar包沖突健无。導(dǎo)致運行失敗荣恐。

    與tomcat中jar包沖突

  • 解決:修改依賴范圍

修改依賴范圍
  • 依賴作用范圍
依賴范圍 對于編譯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
provided范圍的jar包
5.4 運行叠穆、調(diào)試項目
maven手動命令
添加調(diào)試
5.5 maven整合struts2
5.5.1 通過工具生成web.xml及添加編譯jdk版本
通過工具生成web.xml
自己添加插件
搜索插件
<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)先傳遞依賴

第一聲明優(yōu)先原則.圖一

第一聲明優(yōu)先原則.圖二
1.1.2 路徑近者優(yōu)先原則

直接依賴級別高于傳遞依賴硼被。

路徑近者優(yōu)先.圖一
路徑近者優(yōu)先.圖二
1.2 排除依賴
排除依賴操作

排除依賴
1.3 版本鎖定(推薦使用)
版本鎖定
1.4 配置文件中的屬性引用

在配置文件中定義屬性,使用ognl表達式引用屬性值

定義屬性
引用屬性值

2. ssh配置文件加載過程

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所需包渗磅,此系列包會幫你下載struts2spring(4.1.6)相關(guān)基礎(chǔ)jar包,加一個struts2-spring-plugin(2.5.12).jar包嚷硫。(所以,加入這個依賴之后始鱼,maven會幫你下載struts2spring基礎(chǔ)包仔掸,自己不用再添加加Struts2spring的依賴了。而我又添加了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核心包。hibernate5hibernate4相比闺金,區(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ù)管理
    1. 配置事務(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豌拙。完成注入。
    1. 在類中添加屬性生成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;
  }
    1. 在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>
    
    1. 在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>
    1. 新版本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+"/";
        
    1. 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>
```
    1. 總結(jié)
      1. 頁面提交參數(shù)况芒,在服務(wù)端action接收參數(shù)
      2. 調(diào)用業(yè)務(wù)層方法-->dao的方法-->DB 調(diào)
      3. 將返回的數(shù)據(jù)存值棧
      4. 配置結(jié)果視圖 ,跳轉(zhuǎn)頁面 轉(zhuǎn)

4.通過maven對項目進行拆分侧啼、聚合

對現(xiàn)在已有maven ssh項目進行拆分牛柒,拆分思路:將dao層的代碼堪簿、已經(jīng)配置好的文件全體提取出來到一個表現(xiàn)上獨立的工程中。同樣service皮壁、action拆分椭更。

    1. ssh-parent:(父工程)
    2. ssh-dao:(子模塊)
    3. ssh-service
    4. ssh-web
    5. 拆分完成后,對拆分后的項目進行聚合蛾魄,提出概念父工程虑瀑。
4.1 創(chuàng)建父工程
創(chuàng)建父工程1
創(chuàng)建父工程2

創(chuàng)建好父工程目錄結(jié)構(gòu):只有pom.xml,父工程不進行編碼:

    1. 項目需要的依賴的信息滴须,在父工程中定義舌狗,子模塊繼承過程。
    2. 將各個子模塊聚合到一起扔水。
父工程目錄結(jié)構(gòu)
<!-- 屬性 -->
  <!-- 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)代碼&配置文件

創(chuàng)建子模塊ssh-dao-1
創(chuàng)建子模塊ssh-dao-2
子模塊拆分ssh-dao目錄結(jié)構(gòu)

將spring的配置文件進行拆分

  • applicationContext-basic.xml:項目基礎(chǔ)信息
  • applicationContext-dao.xml:dao層bean對象
4.4 創(chuàng)建子模塊ssh-service
創(chuàng)建子模塊maven-ssh-service-1

在service工程pom.xml添加ssh-dao依賴

4.5 創(chuàng)建子模塊ssh-web
創(chuàng)建子模塊maven-ssh-web-1
子模塊maven-ssh-web目錄結(jié)構(gòu)

修改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配置文件
    1. classpath:applicationContext-*.xml加載本項目配置文件
    1. 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 私服安裝
    1. 下載安裝包nexus-2.12.0-01-bundle.zip

    2. 加壓到本地磁盤

    3. 使用管理員權(quán)限打開dos,執(zhí)行安裝命令nexus install安裝私服(bin目錄下)

    4. 啟動服務(wù)nexus start

    5. 找到私服訪問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包上傳路徑
上傳私服-配置項目pom.xml
5.3.3. 執(zhí)行命令發(fā)布項目到私服(上傳)

maven build deploy

5.4 從私服下載jar包到本地倉庫
5.4.1. 在maven目錄下conf/setting.xml,配置模板
配置模板
5.4.2. 激活模板<activeProfiles>

6. 總結(jié)

    1. 使用maven整合ssh框架
    2. 拆分maven工程
      • a) 將每一層代碼&配置文件全部提取到一個獨立的工程
      • b)
    3. 私服

7. Maven的好處

    1. 不再拷貝jar包爪喘。項目不需要存放jar包颜曾。導(dǎo)致項目源代碼小。
    2. 使用maven開發(fā)的工程秉剑,如果環(huán)境統(tǒng)一導(dǎo)入別的maven的項目不會報錯泛豪。
    3. 代碼耦合度進一步降低
    4. 方便項目進行升級
    5. 節(jié)省人力成本
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诡曙,更是在濱河造成了極大的恐慌臀叙,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件价卤,死亡現(xiàn)場離奇詭異劝萤,居然都是意外死亡,警方通過查閱死者的電腦和手機慎璧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門床嫌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胸私,你說我怎么就攤上這事厌处。” “怎么了岁疼?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵阔涉,是天一觀的道長。 經(jīng)常有香客問我五续,道長洒敏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任疙驾,我火速辦了婚禮,結(jié)果婚禮上郭毕,老公的妹妹穿的比我還像新娘它碎。我一直安慰自己,他們只是感情好显押,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布扳肛。 她就那樣靜靜地躺著,像睡著了一般乘碑。 火紅的嫁衣襯著肌膚如雪挖息。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天兽肤,我揣著相機與錄音套腹,去河邊找鬼。 笑死资铡,一個胖子當(dāng)著我的面吹牛电禀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笤休,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼尖飞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起政基,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贞铣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沮明,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辕坝,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年珊擂,在試婚紗的時候發(fā)現(xiàn)自己被綠了圣勒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡摧扇,死狀恐怖圣贸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扛稽,我是刑警寧澤吁峻,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站在张,受9級特大地震影響用含,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帮匾,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一啄骇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘟斜,春花似錦缸夹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛇尚,卻和暖如春芽唇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背取劫。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工匆笤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勇凭。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓疚膊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虾标。 傳聞我的和親對象是個殘疾皇子寓盗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理灌砖,服務(wù)發(fā)現(xiàn),斷路器傀蚌,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評論 6 342
  • 楊冪最近有多火善炫,看看騰訊新聞撩幽,微博熱搜就知道了,人美箩艺,演技好窜醉,作品口碑佳,中國好老板艺谆。 人美榨惰,要求證請去看照片,畢...
    流鳶yl閱讀 589評論 0 3
  • 布置檢查,提升效益效率 放出合作虫给,勇?lián)寵C遇 分派任務(wù)藤抡,而非被動委屈 扶正祛邪,舒肝瀝膽 讓身體發(fā)揮能量 不要臉抹估,要...
    芮涵琪雪閱讀 259評論 0 0
  • 當(dāng)海風(fēng)吹涼霓虹 回首你無影蹤 轉(zhuǎn)眼舊盟已成空 賞夜色千家朦朧 風(fēng)花雪月如夢 提醒我也曾愛過 他在的城市缠黍,有個地方叫...
    十一月四十閱讀 218評論 0 1