1. 程式人生 > >JavaWeb專案管理工具————Maven的使用

JavaWeb專案管理工具————Maven的使用

1、什麼是Maven
Maven是apache下的一個開源專案,是純java開發,並且只是用來管理java專案的。
1.2 Maven好處

普通的傳統專案
這裡寫圖片描述
Maven專案
這裡寫圖片描述
分析:maven專案為什麼這麼小?沒有jar。 需要jar嗎?肯定需要。沒有存在於maven專案裡面,jar存在於哪?
1.3 依賴管理
這裡寫圖片描述
1.4 專案一鍵構建
編碼 編譯 測試(junit) 執行 打包 部署
一個 tomcat:run就能把專案執行起來

Maven能幹的事:
編譯 測試(junit) 執行 打包 部署
1.5 小結
Maven的好處:依賴管理(就是對jar包的統一管理 可以節省空間)、一鍵構建、可以跨平臺、應用於大型專案 可以提高開發效率

分析:
使用者管理 訂單管理 支付管理 。。。。。
Maven的分模組開發
網際網路專案 按業務分
傳統專案 按層分 entity dao service web
2、Maven的安裝配置
這裡寫圖片描述
從此目錄中拷貝檔案:
這裡寫圖片描述
直接解壓到一個沒有中文沒有空格的資料夾裡解壓後的目錄如下:
這裡寫圖片描述
Maven軟體的核心檔案:
這裡寫圖片描述
2.2 Maven環境變數配置
1、要配置jdk, maven3.3.9這個版本所需的jdk版本必須要1.7以上
2、最終要執行的是maven軟體中bin目錄的mvn命令
所以要配置maven的環境變數
在系統變數新增
環境變數的名稱:MAVEN_HOME
變數值:就是maven軟甲解壓的目錄F:\class32\apache-maven-3.3.9
這裡寫圖片描述


3、把MAVEN_HOME新增到path裡
這裡寫圖片描述
4、驗證maven是否配置成功:
開啟dos視窗 輸入: mvn –v
這裡寫圖片描述
2.3Maven倉庫
三種倉庫
1、本地倉庫 自己維護

本地倉庫的配置只需要修改settings.xml檔案就可以
這裡寫圖片描述
2、遠端倉庫(私服) 公司維護
3、中央倉庫 maven團隊維護,有兩個億jar包,所能用到的jar包都有
三種倉庫的關係如下:
這裡寫圖片描述
3、演示入門程式
3.1Maven的目錄結構
這裡寫圖片描述
這裡寫圖片描述
3.2Maven的常用命令
Clean 清理編譯的檔案
這裡寫圖片描述
Compile 編譯了主目錄的檔案
這裡寫圖片描述
Test 編譯並運行了test目錄的程式碼
這裡寫圖片描述


Package 打包
這裡寫圖片描述
Install 就是把專案釋出到本地倉庫
這裡寫圖片描述
Tomcat:run 一鍵啟動
3.3 Maven的生命週期
ompile test package install deploy(釋出到私服)
三種生命週期

Clean生命週期
Clean
Default生命週期
Compile test package install deploy
Site生命週期
Site
3.4 命令和生命週期的階段的關係
不同的生命週期的命令可以同時執行
Mvn clean package
4、專案構建
Maven在eclipse的配置
1、選擇本地安裝好的3.3.9版本的maven軟體
這裡寫圖片描述
2、修改預設的本地倉庫地址
這裡寫圖片描述
專案構建
1、新建maven專案
這裡寫圖片描述
2、跳過骨架,如果不跳過骨架選擇創建出的專案目錄是不全的
這裡寫圖片描述
3、填寫座標
這裡寫圖片描述
4、建立工程
這裡寫圖片描述
4、處理紅色叉號
手動在webapp資料夾下建立一個WEB-INF資料夾,在裡面放一個web.xml檔案
這裡寫圖片描述
5、處理java編譯版本(固定寫法)

在pom.xml中新增如下程式碼

<build>
        <!-- 配置了很多外掛 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>  
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

6、建立一個servlet
這裡寫圖片描述
修改web.xml
刪除重複的程式碼

xmlns=http://java.sun.com/xml/ns/javaee

這裡寫圖片描述
新增jar包(固定寫法)
在pom中新增如下程式碼:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

會發現jar包已新增到專案中
這裡寫圖片描述
啟動專案
右擊專案—run as –maven build ….
這裡寫圖片描述
5、依賴管理
Jar包的管理

需求:整合struts2 頁面上傳一個客戶id 跳轉頁面
5.1 新增依賴:
開啟maven倉庫的檢視:
這裡寫圖片描述
5.2 重建索引
這裡寫圖片描述
1、建立maven專案(同上)
2、跳過骨架(同上)
3、填寫座標資訊(同上)
4、新增web.xml檔案(同上)
5、修改編譯版本(同上)
6、新增座標 選擇Dependencies標籤 點選add
這裡寫圖片描述
7、手動輸入要新增的座標,選擇版本
這裡寫圖片描述
8、可以看到 pom.xml檔案中多出瞭如下程式碼
這裡寫圖片描述
9、同樣的方式新增servlet-api.jar和jsp-api.jar 注意選擇scope為provided
10、寫action程式碼

import com.opensymphony.xwork2.ActionSupport;
public class CutomerAction extends ActionSupport {
    private Long custId;
    public Long getCustId() {
        return custId;
    }
    public void setCustId(Long custId) {
        this.custId = custId;
    }
    public String findById(){

        return SUCCESS;
    }

}

11、新增struts.xml檔案放到resources目錄中
這裡寫圖片描述
內容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!-- 配置常量 -->
    <!-- 字符集 -->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 開發模式 -->
    <constant name="struts.devMode" value="true"></constant>

    <!-- 通用package -->
    <package name="customer" namespace="/" extends="struts-default">

        <action name="find" class="cn.itcast.action.CutomerAction"  
            method="findById">
            <result name="success">/jsp/info.jsp</result>
        </action>

    </package>
</struts>

12、新增jsp頁面
這裡寫圖片描述
13、修改web.xml檔案 新增過濾器

<filter>
    <filter-name>struts2</filter-name>
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>

5.3 依賴範圍

5.3.1 Compile struts2-core
編譯(compile)時需要 測試時需要,執行時需要,打包時需要
5.3.2 Provided jsp-api.jar servlet-api.jar
編譯(compile)時需要,測試(test)時也需要 ,執行時不需要,打包時不需要
5.3.3 Runtime 資料庫驅動包
編譯時不需要,測試時需要,執行時需要,打包時需要
5.3.4 Test junit.jar
編譯時不需要,測試時需要,執行時不需要,打包也不需要
新增外掛

Maven add plugin
這裡寫圖片描述
如果用tomcat7執行用命令:
Tomcat7:run

常見問題:
這裡寫圖片描述
這是由jre版本與jdk版本不匹配的問題,jdk版本不應該高於jre版本。

<modelVersion>  
座標  GAV
<groupId>cn.itcast</groupId>
<artifactId>ssh</artifactId>
<version>0.0.1-SNAPSHOT</version>
Packaging  打包方式  
Jar  war  pom
<dependencies>
 <dependency>
<build>  裡面放的是外掛

<plugins>
 <plugin>

6、整合ssh框架
6.1 依賴傳遞
只添加了一個struts2-core依賴,發現專案中出現了很多jar,
這種情況 叫 依賴傳遞
這裡寫圖片描述
6.2 依賴版本衝突的解決
1、第一宣告優先原則

<dependencies>
  <!--   spring-beans-4.2.4 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>


<!--   spring-beans-3.0.5 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>2.3.24</version>
    </dependency>

2、路徑近者優先原則
自己新增jar包

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>

3、排除原則(排除spring-beans版本)

<dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>2.3.24</version>
        <exclusions>
          <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
          </exclusion>
        </exclusions>
    </dependency>

4、版本鎖定原則

<properties>
        <spring.version>4.2.4.RELEASE</spring.version>
        <hibernate.version>5.0.7.Final</hibernate.version>
        <struts.version>2.3.24</struts.version>
    </properties>

    <!-- 鎖定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
</dependencies>
</dependencyManagement>

需求:
傳客戶ID 頁面上顯示客戶資訊
準備資料庫
6.3 構建專案
1、建立資料庫
這裡寫圖片描述
2、完善pom.xml檔案,把ssh相關的依賴都新增上去(固定寫法,直接新增依賴不需要手寫)

 <!-- 屬性 -->
    <properties>
        <spring.version>4.2.4.RELEASE</spring.version>
        <hibernate.version>5.0.7.Final</hibernate.version>
        <struts.version>2.3.24</struts.version>
    </properties>

    <!-- 鎖定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>${struts.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-spring-plugin</artifactId>
                <version>${struts.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 依賴管理 -->
    <dependencies>
        <!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>

        <!-- 資料庫驅動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        <!-- c3p0 -->

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>


        <!-- 匯入 struts2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
        </dependency>

        <!-- servlet jsp -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- 日誌 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.2</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <!-- jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 設定編譯版本為1.7 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- maven內建 的tomcat6外掛 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <!-- 可以靈活配置工程路徑 -->
                    <path>/ssh</path>
                    <!-- 可以靈活配置埠號 -->
                    <port>8080</port>
                </configuration>
            </plugin>
        </plugins>
    </build>

3、完成實體類程式碼
這裡寫圖片描述
4、完成dao程式碼
介面

package cn.itcast.dao;

import cn.itcast.entity.Customer;

public interface CustomerDao {

    public Customer getById(Long id);

}

實現類

package com.itcast.dao.impl;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import cn.itcast.dao.CustomerDao;
import cn.itcast.entity.Customer;
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
    @Override
    public Customer getById(Long id) {
        return this.getHibernateTemplate().get(Customer.class, id);
    }
}

5、完成service程式碼
介面

package com.itcast.service;
import cn.itcast.entity.Customer;
public interface CustomerService {
    public Customer getById(Long id);
}

實現類

package com.itcast.service.impl;

import com.itcast.service.CustomerService;

import cn.itcast.dao.CustomerDao;
import cn.itcast.entity.Customer;

public class CustomerServiceImpl implements CustomerService {
    private CustomerDao  customerDao;
    public void setCustomerDao(CustomerDao customerDao) {
        this.customerDao = customerDao;
    }
    @Override
    public Customer getById(Long id) {
        return customerDao.getById(id);
    }
}

6、完成action程式碼

package cn.itcast.action;
import com.itcast.service.CustomerService;
import com.opensymphony.xwork2.ActionSupport;
import cn.itcast.entity.Customer;
public class CutomerAction extends ActionSupport {
    //兩個成員變數
    private Customer  customer;

    private Long custId;
    public Customer getCustomer() {
        return customer;
    }
    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
    private CustomerService customerService;
    public void setCustomerService(CustomerService customerService) {
        this.customerService = customerService;
    }
    public Long getCustId() {
        return custId;
    }
    public void setCustId(Long custId) {
        this.custId = custId;
    }
    public String findById(){
        customer = customerService.getById(custId);
        return SUCCESS;
    }
}

7、將配置檔案放入到 src/main/resources目錄中
Customer.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-2-26 16:58:40 by Hibernate Tools 4.3.1.Final -->
<hibernate-mapping>
    <class name="cn.ctgu.crm.entity.Customer" table="cst_customer"  optimistic-lock="version">
        <id name="custId" type="java.lang.Long">
            <column name="cust_id" />
            <generator class="identity" />
        </id>
        <property name="custName" type="string">
            <column name="cust_name" length="32" not-null="true"></column>
        </property>
        <property name="custUserId" type="java.lang.Long">
            <column name="cust_user_id"></column>
        </property>
        <property name="custCreateId" type="java.lang.Long">
            <column name="cust_create_id"></column>
        </property>
        <property name="custIndustry" type="string">
            <column name="cust_industry" length="32"></column>
        </property>
        <property name="custLevel" type="string">
            <column name="cust_level"