maven

為{幸葍}努か 提交于 2020-02-17 07:48:50

一、 Maven 概念


1 什么是 Maven

mvnrepository.com


Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建,
报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的
缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项
目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且
公司项目采用 Maven 的比例在持续增长。


2 Maven 和 ANT 的区别


Ant 是软件构建工具,Maven 的定位是软件项目管理和理解工具。Maven 除了具备 Ant
的功能外,还增加了以下主要的功能:


1)使用 Project Object Model 来对软件项目管理;
2)内置了更多的隐式规则,使得构建文件更加简单;
3)内置依赖管理和 Repository 来实现依赖的管理和统一存储;
4)内置了软件构建的生命周期;


目前,绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是,
Ant 的项目管理工具(作为 make 的替代工具)不能满足绝大多数开发人员的需要。通过检
查 Ant 构建文件,很难发现项目的相关性信息和其它信息(如开发人员/拥有者、版本或站
点主页)。


二、 Maven 的下载与 IDE 的整合


1 下载地址


http://maven.apache.org/


2 Maven 的目录结构

3 Eclipse 整合 Maven


3.1整合步骤

 

 

3.2指定 maven 的配置文件

 

 

4 Maven 仓库与配置


4.1Maven 仓库是什么


4.1.1Maven 仓库


Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服
务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存
储路径。得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全
相同的,Maven 可以在某个位置统一存储所有的 Maven 项目共享的构件,这个统一的位
置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。
对于 Maven 来说,仓库分为两类:本地仓库和远程仓库。

 

4.1.2远程仓库


远程仓库指通过各种协议如 file://和 http://访问的其它类型的仓库。这些仓库可能是第
三方搭建的真实的远程仓库,用来提供他们的构件下载(例如 repo.maven.apache.org 和
uk.maven.org 是 Maven 的中央仓库)。其它“远程”仓库可能是你的公司拥有的建立在文件
或 HTTP 服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。


4.1.3本地仓库


本地仓库指本机的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件。


5 仓库配置


5.1在 settings.xml 文件中配置本地仓库


本地仓库是开发者本地电脑中的一个目录,用于缓存从远程仓库下载的构件。默认的本
地仓库是${user.home}/.m2/repository。用户可使用 settings.xml 文件修改本地仓库。具体内容
如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库配置 -->
<localRepository>/put/your/local/repository/here</localRepository>
<!-- 省略,具体信息参考后续内容。 -->
</settings>

 

5.2在 settings.xml 文件中配置镜像仓库


如果仓库 A 可以提供仓库 B 存储的所有内容,那么就可以认为 A 是 B 的一个镜像。例
如:在国内直接连接中央仓库下载依赖,由于一些特殊原因下载速度非常慢。这时,我们可
以使用阿里云提供的镜像 http://maven.aliyun.com/nexus/content/groups/public/来替换中央仓
库 http://repol.maven.org/maven2/。修改 maven 的 setting.xml 文件,具体内容如下:

<mirror> 
<!-- 指定镜像 ID -->
<id>nexus-aliyun</id> 
<!-- 匹配中央仓库。-->
<mirrorOf>central</mirrorOf>
<!-- 指定镜像名称 --> 
<name>Nexus aliyun</name> 
<!-- 指定镜像路径 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

 

6 仓库优先级问题


本地仓库,镜像仓库,中央仓库。
镜像仓库=中央仓库。 镜像仓库是用于替代中央仓库的。
仓库访问优先级:


6.1本地仓库


第一访问本地仓库。

 

6.2指定仓库


如果本地仓库不存在对应信息,访问配置文件中指定的远程仓库。
这个远程仓库是第二优先级。


6.3远程仓库


6.3.1镜像仓库


镜像仓库是 Maven 开发过程中的首选远程仓库,在本地仓库和指定仓库无法获取资源
的时候,直接访问镜像仓库。


6.3.2中央仓库


如果镜像仓库不是中央仓库,则会在访问镜像仓库无法获取资源后,访问中央仓库。


三、 Maven 工程

1 Maven 的工程类型


1.1POM 工程


POM 工程是逻辑工程。用在父级工程或聚合工程中。用来做 jar 包的版本控制。


1.2JAR 工程


将会打包成 jar 用作 jar 包使用。即常见的本地工程 - Java Project。


1.3WAR 工程

 

将会打包成 war,发布在服务器上的工程。如网站或服务。即常见的网络工程 - Dynamic
Web Project。war 工程默认没有 WEB-INF 目录及 web.xml 配置文件,IDE 通常会显示工程
错误,提供完整工程结构可以解决。

 

2 创建 Maven 项目


2.1创建步骤


2.1.1New--> other -->Maven Project

2.1.2勾选,创建纯净项目,不应用任何模版

 

2.2填写项目信息


2.2.1 Group Id 公司域名倒写


2.2.2 Artifact Id 项目名


2.2.3 Version 版本名


2.2.4 Packaging 项目类型


2.2.4.1 Jar java 项目


2.2.4.2 War : web 项目


2.2.4.3 POM: 父项目.如果项目有子项目,项目必须是 pom


2.2.5 Name : 自定义名称,内容任意


2.2.6 Description: 描述.详细描述.


2.2.7 Parent Project: 如果当前项目有父项目时填写


2.3Maven 项目结构


src/main/java 这个目录下储存 java 源代码

src/main/resources 储存主要的资源文件。比如spring的xml配置文件和log4j的properties文件。

src/test/java 储存测试用的类,比如 JUNIT 的测试一般就放在这个目录下面


src/test/resources 储存测试用的资源文件


src 包含了项目所有的源代码和资源文件,以及其他项目相关的文件。


target 编译后内容放置的文件夹


pom.xml 是 Maven 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等等

 

3 工程关系


3.1依赖


即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种
情况下,需要在 pom.xml 文件中增加下属配置定义依赖关系。

<dependencies> 
<!-- 定义一个具体的依赖 -->
 <dependency> 
<!-- 依赖的工程所在组名 --> 
<groupId>groupName</groupId>
 <!-- 依赖的工程名 -->
 <artifactId>artifactName</artifactId> 
<!-- 依赖的工程版本 --> 
<version>versionNo</version> 
<scope>system</scope>
 </dependency> 
</dependencies>

3.2继承


如果 A 工程继承 B 工程,则代表 A 工程默认依赖 B 工程依赖的所有资源,且可以应用
B 工程中定义的所有资源信息。被继承的工程(B 工程)只能是 POM 工程。

3.2.1父工程配置

 

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
xsi:schemaLocation="http://maven.apache.org/POM/4.
0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.bjsxt</groupId>
 <artifactId>03parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>pom</packaging>
<properties>
 <junit-version>4.1</junit-version>
 </properties>
 <dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>${junit-version}</version>
 </dependency>
 </dependencies>
 </dependencyManagement>
</project>
View Code

3.2.2子工程配置

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
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>
 <parent>
 <groupId>com.bjsxt</groupId>
 <artifactId>03parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </parent>
 <groupId>com.bjsxt</groupId>
 <artifactId>04son</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 
 <dependencies>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 </dependency>
 </dependencies>
</project>
View Code

 

3.3聚合


当我们开发的工程拥有 2 个以上模块的时候,每个模块都是一个独立的功能集合。比如
某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候每个平台都可以独立编译,
测试,运行。这个时候我们就需要一个聚合工程。
在创建聚合工程的过程中,总的工程必须是一个 POM 工程(Maven Project),各子模
块可以是任意类型模块(Maven Module)。所有聚合工程和聚合模块必须处于同一个组
(groupId)中,且聚合工程可以嵌套。


3.3.1创建聚合项目

3.3.2创建模块

3.3.3聚合项目的 POM 文件

<project
xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
xsi:schemaLocation="http://maven.apache.org/POM/4.
0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.bjsxt</groupId>
 <artifactId>05maven-manager</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>pom</packaging>
 <modules>
 <module>05maven-sub1</module>
 <module>06maven-sub2</module>
 </modules>
</project>
View Code

 

<dependencyManagement></dependencyManagement>

dependencyManagement的作用:依赖版本管理器

  1. 本身并不下载任何依赖,只是管理依赖的版本。依赖的下载依然需要单独的<dependencies>(不加dependencyManagement,额外写一个)去做
  2. 如果<dependencies>中的<dependency>没有声明版本号(version),maven会去寻找有无对应的dependencyManagement,当前工程没有就会向上找父工程。如果找到就以dependencyManagement中对应依赖声明的version为准,否则报错version is missing

 

 

4 创建 war 类型项目

四、 Maven 中的常见插件


1 编译器插件


1.1pom.xml 配置片段

<build>
 <plugins>
 <!-- java 编译插件 -->
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>3.2</version>
 <configuration>
 <source>1.7</source>
 <target>1.7</target>
 <encoding>UTF-8</encoding>
 </configuration>
 </plugin>
 </plugins>
 </build>

1.2settings.xml 文件中配置全局编译器插件

<profile>
<!-- 定义的编译器插件 ID,全局唯一 -->
<id>jdk-1.7</id>
<!-- 插件标记,activeByDefault 默认编译器,jdk 提供编译器版本 -->
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<!-- 配置信息 source-源信息,target-字节码信息,compilerVersion-编译过程版
本 -->
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>

2 Tomcat 管理插件


2.1本地应用


      使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。应用启
动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中
的具体功能。具体 pom.xml 文件的配置如下

<build>
 <plugins>
 <!-- 配置 Tomcat 插件 -->
 <plugin>
 <groupId>org.apache.tomcat.maven</groupId>
 <artifactId>tomcat7-maven-plugin</artifactId>
 <version>2.2</version>
 <configuration>
 <port>8080</port>
 <path>/</path>
 </configuration>
 </plugin>
 </plugins>
 </build>
View Code

 

2.2远程热部署


       远程热部署是指,在 Tomcat 容器运行过程中,动态实现 war 工程的部署,重新部署功
能。使用 maven build 功能实现,具体命令为:tomcat7:deploy 或 tomcat7:redeploy。其中 deploy
代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部
署同名 war 工程。
       实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验
证方式。
       实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访
问用户,所以在 Tomcat 中也需提供部分配置。具体配置内容如下:

2.2.1Tomcat 中的 conf/tomcat-users.xml 文件的配置

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcatUsername" password="tomcatPassword"
roles="manager-gui,manager-script"/>

 

2.2.2pom.xml 文件中的配置

<build>
 <plugins>
 <!-- 配置 Tomcat 插件 -->
 <plugin>
 <groupId>org.apache.tomcat.maven</groupId>
 <artifactId>tomcat7-maven-plugin</artifactId>
 <version>2.2</version>
 <configuration>
 <!-- path: 上传的 war 包解压后的路径命名 -->
 <path>/ROOT</path>
 <!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 -->
 <url>http://ip:port/manager/text</url>
 <!-- 为 tomcat 配置的管理用户名和密码. -->
 <username>tomcatUsername</username>
 <password>tomcatPassword</password>
 </configuration>
 </plugin>
 </plugins>
 </build>

 

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com</groupId>
    <artifactId>09maven-tomcatplugin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <build>
        <plugins>
            <!-- 配置 Tomcat 插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!-- path: 上传的 war 包解压后的路径命名 -->
                    <path>/</path>
                    <!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 -->
                    <url>http://192.168.43.62:8080/manager/text</url>
                    <!-- 为 tomcat 配置的管理用0户名和密码. -->
                    <username>root</username>
                    <password>root</password>
                </configuration>
                
            </plugin>
        </plugins>
    </build>
</project>
View Code

 

3 资源拷贝插件


Maven 在打包时默认只将 src/main/resources 里的配置文件拷贝到项目中并做打包处理,
而非 resource 目录下的配置文件在打包时不会添加到项目中。

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include><include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>

 

 

两个插件实现了部署Jar项目只需要执行Jar就好了,而且这种方式不像SpringBoot把所有依赖全部放入Jar包中生成的Jar较大,代码修改上传耗时。如果程序需不需要修改依赖Jar,我们只需要上传我们自己写的Jar就好了就几M。

五、 Maven 常用命令

1 install


本地安装, 包含编译,打包,安装到本地仓库
编译 - javac
打包 - jar, 将 java 代码打包为 jar 文件
安装到本地仓库 - 将打包的 jar 文件,保存到本地仓库目录中。


2 clean


清除已编译信息。
删除工程中的 target 目录。


3 compile


只编译。 javac 命令


4 deploy


部署。 常见于结合私服使用的命令。
相当于是 install+上传 jar 到私服。
包含编译,打包,安装到本地仓库,上传到私服仓库。


5 package


打包。 包含编译,打包两个功能。


六、 私服


1 什么是私服


私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程
仓库,供局域网使用。
在企业开发中,私服的建设是有必要的,其好处如下:


1.1节省资金、外网带宽


利用私服代理外部仓库之后,对外的重复构件下载便得以简化,降低外网带宽压力。


1.2加速 Maven 构建


不停地连接请求外部仓库是相当耗时的,但是 maven 的一些内部机制(如快照更新检
查)要求 Maven 在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外
部远程仓库的时候,构建速度会降低。使用私服解决这问题,因为 Maven 只需要检查局域
网内私服的数据时,构建速度便有明显提高。


1.3部署第三方构件


当某个构件无法从任何一个远程仓库获取怎么办?比如 Oracle 的 JDBC 驱动由于版权
原因不能发布到公共仓库中。建立私服后,便可以将这些构件部署到这个内部仓库中,供内
部 Maven 项目使用。


1.4提高稳定性,增强控制


对于远程仓库来说,当外网不可用时,Maven 构建有可能因为依赖没有下载而不可行,
搭建并应用私服后,即使没有外网,如果该构件之前被其它人下载过就会存在私服上,此时
再次依赖该构件就可以不用连接外网直接就可以从私服上下载到。同时私服软件(nexus)还
提供了额外的管理功能。


1.5降低中央仓库的负荷


中央仓库是有限的。如果所有的 Maven 工程开发过程中,都通过中央仓库实现构件的
依赖和管理,那么中央仓库的负荷过高,也会严重影响工程构建的效率。如果使用私服,可
以分散中央仓库的负荷,只有在私服中没有需要依赖的构件时才会去连接中央仓库。

 

2 nexus 私服搭建


2.1搭建环境


环境:CentOS6.5、JDK7、Sonatype Nexus、Maven(Eclipse 或 MyEclipse)


2.2搭建步骤


2.2.1安装 JDK


2.2.1.1 JDK 资源包下载


JDK 官方下载地址为:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
本课程使用版本为 JDK1.7。(jdk-7u80-linux-x64.tar.gz)

 

2.2.1.2 JDK 资源包解压


在 Linux 中安装应用的常用目录为:/opt 或/usr/local 目录。本课件将 JDK 安装到
/usr/local/java 目录中。
解压 JDK 到指定目录:
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local
重命名 JDK 目录:
mv /usr/local/jdk1.7.0_80 /usr/local/java


2.2.1.3 环境变量配置


修改/etc/profile 配置文件,增加环境变量配置

export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

环境变量修改后,可以重启 Linux 实现永久生效;或执行 source /etc/profile 命令,让新
修改的环境变量在当前终端中生效。

 

2.2.2安装私服 Nexus


2.2.2.1 Nexus 资源包下载


Nexus 官方下载地址为:
https://www.sonatype.com/nexus-repository-oss
本课件应用版本为:nexus-2.11.2-03


2.2.2.2 Nexus 资源包解压


在/usr/local 目录中创建子目录 nexus:
mkdir /usr/local/nexus
解压 Nexus 到指定目录:
tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexus
Nexus 压缩包中包含两个子目录: nexus-2.11.2-03 和 sonatype-work
nexus-2.11.2-03 是具体的私服应用内容,sonatype-work 是 Nexus 私服下载的构件存放工
作目录。


2.2.2.3 检查私服端口和工作目录


在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看
nexus.properties 文件,确定私服访问端口和工作目录。此操作可不做任何内容修改。配置文
件内容如下:

# Jetty section,Nexus 私服应用是使用 Jetty 提供 web 服务的,下述内容为 Jetty 配置。
application-port=8081 # 私服访问端口
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus # Nexus 私服 WEB 应用所在位置
nexus-webapp-context-path=/nexus # Nexus 私服 WEB 应用 contextPath

# Nexus section Nexus 私服配置信息
nexus-work=${bundleBasedir}/../sonatype-work/nexus # 私服工作目录,即构件保存目

runtime=${bundleBasedir}/nexus/WEB-INF # 私服 WEB 应用运行目录

 

2.2.2.4 修改 Nexus 运行用户


Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。
Nexus 的启动脚本文件中,可以指定私服应用的访问用户,此信息在 nexus-2.11.2-03/bin/nexus
脚本文件中定义。需要修改的信息如下:

# NOTE - This will set the user which is used to run the Wrapper as well as
# the JVM and is not useful in situations where a privileged resource or
# port needs to be allocated prior to the user being changed.
#RUN_AS_USER= #原内容
RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。

2.2.2.5 修改防火墙,开放 Nexus 私服端口访问


修改防火墙配置文件,开放 Nexus 私服的访问端口 8081(2.2.2.3 章节内容)。
vi /etc/sysconfig/iptables
增加下述内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT

重新启动防火墙:
service iptables restart

 

2.2.2.6 启动并测试访问


启动 Nexus 私服:


/usr/local/nexus/nexus-2.11.2-03/bin/nexus start
成功启动后,控制台输出内容如下:

****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.


可通过命令检查私服运行状态:
/usr/local/nexus/nexus-2.11.2-03/bin/nexus status
内容如下为私服运行中:
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Nexus OSS is running (3883).
内容如下为私服未运行:
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Nexus OSS is not running.
也可使用浏览器访问 Nexus 私服 WEB 应用, 访问地址为:
http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP),访问效果如下:

 

3 私服配置


3.1登录


Nexus 默认提供管理用户,用户名为 admin,密码为 admin123。

 

3.2仓库管理


3.2.1检查仓库

 

3.2.2仓库类型简述

 

常用仓库类型为:hosted 和 proxy。


3.2.2.1 group


仓库组:Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组
管理的多个仓库。


3.2.2.2 hosted


宿主仓库:主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及
无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。


3.2.2.2.1releases


发布内部的 releases 模块的仓库,所有非快照版本工程都发布到此仓库中。


3.2.2.2.2snapshots


发布内部的快照模块的仓库,所有工程版本以 SNAPSHOT 结尾的都发布到此仓库中。


3.2.2.2.33rd party


第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去


3.2.2.3 proxy


代理仓库:代理公共的远程仓库。


3.2.2.4 virtual


虚拟仓库:用于适配 Maven 1。

 

3.2.3代理仓库配置


设置 proxy 代理仓库(Apache Snapshots/Central/Codehaus Snapshots)准许远程下载。

4 私服应用


要在 Maven 工程中使用私服,需要提供私服配置信息。


4.1settings.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<settings
 xmlns="http://maven.apache.org/SETTINGS/1.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="
 http://maven.apache.org/SETTINGS/1.0.0 
 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 <localRepository>D:/repositories</localRepository>
<!--Maven 是否需要和用户交互以获得输入。如果 Maven 需要和用户交互以获得输入,则设置成 true,
反之则应为 false。默认为 true。-->
 <interactiveMode>true</interactiveMode>
<!--表示 Maven 是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为 true,默认
为 false。 -->
 <offline>false</offline>
<!--当插件的组织 Id(groupId)没有显式提供时,供搜寻插件组织 Id(groupId)的列表。该元素
包含一个 pluginGroup 元素列表,每个子元素包含了一个组织 Id(groupId)。当我们使用某个插件,
并且没有在命令行为其提供组织 Id(groupId)的时候,Maven 就会使用该列表。
 <pluginGroups>
 <pluginGroup>org.mortbay.jetty</pluginGroup>
 <pluginGroup>org.jenkins-ci.tools</pluginGroup>
 </pluginGroups>
 <proxies>
 </proxies>
<!--配置服务端的一些设置。一些设置如安全证书不应该和 pom.xml 一起分发。这种类型的信息应该存
在于构建服务器上的 settings.xml 文件中。-->
 <servers>
 <server>
 <!-- server 的 id 必须和 pom.xml 文件中的仓库 id 一致 -->
<!--这是 server 的 id(注意不是用户登陆的 id),该 id 与 distributionManagement 中
repository 元素的 id 相匹配。-->
 <id>nexus-releases</id>
 <username>deployment</username>
 <password>deployment123</password>
 </server>
 <server>
 <id>nexus-snapshots</id>
 <username>deployment</username>
 <password>deployment123</password>
 </server>
 </servers>
<!--根据环境参数来调整构建配置的列表。-->
 <profiles>
 <profile>
 <id>jdk-1.7</id>
 <activation>
 <activeByDefault>true</activeByDefault>
 <jdk>1.7</jdk>
 </activation>
 <properties>
 <maven.compiler.source>1.7</maven.compiler.source>
 <maven.compiler.target>1.7</maven.compiler.target>
 <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
 </properties>
 </profile>
 <profile>
 <id>sxt</id>
 <activation>
 <activeByDefault>false</activeByDefault>
 <jdk>1.7</jdk>
 </activation>
 <repositories>
 <!-- 私有库配置 -->
 <repository>
 <!-- 私有库 id -->
 <id>nexus</id>
 <!-- 私有库地址 -->
 <url>http://192.168.120.158:8081/nexus/content/groups/public/</url>
 <!-- 私有库是否支持 releases 版本 -->
 <releases>
 <enabled>true</enabled>
 </releases>
 <!-- 私有库是否支持 snapshots 版本 -->
 <snapshots>
 <enabled>true</enabled>
 </snapshots>
 </repository>
 </repositories> 
 <pluginRepositories>
 <!-- 插件库配置,具体含义私有库配置 -->
 <pluginRepository>
 <id>nexus</id>
 <url>http://192.168.120.158:8081/nexus/content/groups/public/</url>
 <releases>
 <enabled>true</enabled>
 </releases>
 <snapshots>
 <enabled>true</enabled>
 </snapshots>
 </pluginRepository>
 </pluginRepositories>
 </profile>
 </profiles>
 <!-- 激活 profile -->
 <activeProfiles>
 <!-- 根据 profile 的 id 标签值激活指定的内容 -->
 <activeProfile>sxt</activeProfile>
 </activeProfiles>
</settings>
View Code

4.2pom.xml 文件


在顶级的 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>group</groupId>
 <artifactId>project</artifactId>
 <version>1.0</version>
 
 <distributionManagement>
 <repository>
 <id>nexus-releases</id>
 <name>Nexus Release Repository</name>
 <url>http://192.168.120.158:8081/nexus/content/repositories/releases/</url>
 </repository>
 <snapshotRepository>
 <id>nexus-snapshots</id>
 <name>Nexus Snapshot Repository</name>
 <url>http://192.168.120.158:8081/nexus/content/repositories/snapshots/</url>
 </snapshotRepository>
 </distributionManagement>
 <build>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-source-plugin</artifactId>
 <version>2.1.2</version>
 <executions>
 <execution>
 <id>attach-sources</id>
 <goals>
 <goal>jar</goal>
 </goals>
 </execution>
 </executions>
 </plugin>
 </plugins>
 </build>
</project>
View Code

4.3发布本地工程到私服


在 Maven 工程的 maven build 中,输入命令 deploy,即可实现发布工程信息到私服。
如果同版本工程可能多次发布,需要修改 Nexus 配置。

4.4发布三方插件到私服

 

 

七、 Maven 实战


1 需求分析


基于 SSM 框架的 CRUD 案例


2 技术选型


框架:SpringMVC+Spring+Mybatis
数据库:MySQL
项目构建工具:Maven

3 项目架构设计


3.1传统项目设计方式

 3.2Maven 项目设计方式

4 创建工程


4.1创建 Parent 工程

4.2修改 POM 文件

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
xsi:schemaLocation="http://maven.apache.org/POM/4.
0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.bjsxt</groupId>
 <artifactId>11parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>pom</packaging>
 
 <properties>
 <junit.version>4.12</junit.version>
<spring.version>4.1.3.RELEASE</spring.version>
<mybatis.version>3.2.8</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.v
ersion>
<mysql.version>5.1.32</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<druid.version>1.0.9</druid.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<tomcat.version>2.2</tomcat.version>
 </properties>
 <!-- jar 包的依赖注入 ,由于该工程是一个父工程,
所以 jar 包在该 pom 文件中只是声明-->
 <dependencyManagement>
 <dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSP 相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
 </dependencyManagement>
 
 <!-- 插件的开启 -->
 <build>
 <!-- tomcat 插件,由于子项目不一定每个都是 web
项目,所以该插件只是声明,并未开启 -->
 <pluginManagement>
 <plugins>
<!-- 配置 Tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.version}</version>
</plugin>
</plugins>
 </pluginManagement>
 
 <!-- maven 的编译器插件,该插件主要是决定了当前
项目所使用 jre 版本 。由于无论是 jar,还是 war 项目都需要
制定 jar 的版本,所以该插件不需要生命,应当是开启的。-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
 </build>
</project>
View Code

 

 4.3创建聚合工程 Manager

4.3.1创建 manager-pojo

4.3.2创建 manager-mapper

4.3.3修改 manager-mapper 的 pom 文件

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
xsi:schemaLocation="http://maven.apache.org/P
OM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.bjsxt</groupId>
<artifactId>12manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>manager-mapper</artifactId>
<dependencies>
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>manager-pojo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
</project>
View Code

 

4.3.4创建 manager-service

4.3.5修改 manager-service 的 pom 文件

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
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>
 <parent>
 <groupId>com.bjsxt</groupId>
 <artifactId>12manager</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </parent>
 <artifactId>manager-service</artifactId>
 <dependencies>
 <dependency>
 <groupId>com.bjsxt</groupId>
 <artifactId>manager-mapper</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </dependency>
 <!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
 </dependencies>
</project>
View Code

4.3.6创建 manager-controller

4.3.7修改 manager-controller 的 pom 文件

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
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>
 <parent>
 <groupId>com.bjsxt</groupId>
 <artifactId>12manager</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </parent>
 <artifactId>manager-controller</artifactId>
 <packaging>war</packaging>
 
 <dependencies>
 <dependency>
 <groupId>com.bjsxt</groupId>
 <artifactId>manager-service</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </dependency>
 <!-- JSP 相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
 </dependencies>
</project>
View Code

4.4在数据库中创建 users 表

CREATE TABLE `users` (
 `userid` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(30) DEFAULT NULL,
 `userage` int(11) DEFAULT NULL,
 PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.5框架整合


4.5.1数据库配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?ch
aracterEncoding=utf-8
jdbc.username=root
jdbc.password=root

4.5.2Mybatis 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
 <!-- 配置分页插件 -->
 </configuration>

4.5.3applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans
"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
nstance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org
/schema/context"
xmlns:mvc="http://www.springframework.org/sch
ema/mvc"
xsi:schemaLocation="http://www.springframewor
k.org/schema/beans 
http://www.springframework.org/schema/beans/spring
-beans.xsd
 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-m
vc-4.0.xsd
 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spri
ng-context.xsd">
<!-- 配置解析 properties 文件的工具类 -->
<context:property-placeholder
location="classpath:resource/*.properties"/>
<!-- 配置数据源 dataSource -->
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
 <property name="url" value="${jdbc.url}"
/>
<property name="username"
value="${jdbc.username}" />
<property name="password"
value="${jdbc.password}" />
<property name="driverClassName"
value="${jdbc.driver}" />
<property name="maxActive" value="10" />
<property name="minIdle" value="5" />
</bean>
<!-- 创建 mybatis 的上下文对象 -->
<bean
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="configLocation">
<value>classpath:mybatis/SqlMapperClient.xml</v
alue>
</property>
</bean>
<!-- 扫描 mybatis 的接口与映射配置文件 -->
<bean
class="org.mybatis.spring.mapper.MapperScannerConf
igurer">
<property name="basePackage"
value="com.bjsxt.mapper"/>
</bean>
</beans>
View Code

4.5.4applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans
"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
nstance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org
/schema/context"
xmlns:mvc="http://www.springframework.org/sch
ema/mvc"
xsi:schemaLocation="http://www.springframewor
k.org/schema/beans 
http://www.springframework.org/schema/beans/spring
-beans.xsd
 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-m
vc-4.0.xsd
 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spri
ng-context.xsd">
<!-- 扫描 bean 对象 -->
<context:component-scan
base-package="com.bjsxt.service"/>
</beans>
View Code

4.5.5applicationContext-trans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans
"
xmlns:context="http://www.springframework.org
/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/sch
ema/aop"
xmlns:tx="http://www.springframework.org/schema/tx
"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
nstance"
xsi:schemaLocation="http://www.springframewor
k.org/schema/beans 
http://www.springframework.org/schema/beans/spring
-beans-4.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spri
ng-context-4.0.xsd
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-a
op-4.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx
-4.0.xsd
http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/springutil-4.0.xsd">
 <!-- 配置事物管理器的切面 -->
 <bean id="transactionMananger"
class="org.springframework.jdbc.datasource.DataSou
rceTransactionManager">
<property name="dataSource"
ref="dataSource"/> 
 </bean> 
 
 <!-- 配置事物传播行为 :其实就是那些方法应该受什
么样的事物控制-->
 <tx:advice id="advice"
transaction-manager="transactionMananger">
 <tx:attributes>
 <tx:method name="add*"
propagation="REQUIRED"/>
 <tx:method name="modify*"
propagation="REQUIRED"/>
 <tx:method name="update*"
propagation="REQUIRED"/>
 <tx:method name="dorp*"
propagation="REQUIRED"/>
 <tx:method name="del*"
propagation="REQUIRED"/>
 <tx:method name="find*"
read-only="true"/>
 </tx:attributes>
 </tx:advice>
 
 <!-- 那些类下的方法需要参与到当前的事物管理中 。
配置切点 -->
 <aop:config>
 <aop:advisor advice-ref="advice"
pointcut="execution(* 
com.bjsxt.service.*.*(..))"/>
 </aop:config>
</beans>
View Code

4.5.6springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans
"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
nstance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org
/schema/context"
xmlns:mvc="http://www.springframework.org/sch
ema/mvc"
xsi:schemaLocation="http://www.springframewor
k.org/schema/beans 
http://www.springframework.org/schema/beans/spring
-beans.xsd
 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-m
vc-4.0.xsd
 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spri
ng-context.xsd">
 <!-- 包的扫描器主要是扫描@controller -->
 <context:component-scan
base-package="com.bjsxt.web.controller"/> 
 <!-- 注册两个新对象 主要是为了来处理
springmvc 中的其他 anntation 如:@requestmapping -->
 <mvc:annotation-driven/>
 
 <!-- 视图解析器 -->
 <bean
class="org.springframework.web.servlet.view.Intern
alResourceViewResolver">
<property name="prefix"
value="/WEB-INF/jsp/" /><!-- jsp 所在的前缀 -->
<property name="suffix" value=".jsp" />
 </bean>
 <!-- 配置静态资源映射 -->
 <mvc:resources location="/WEB-INF/css/"
mapping="/css/**"/>
<mvc:resources location="/WEB-INF/js/"
mapping="/js/**"/>
 <!-- 文件上传处理器 -->
 <bean id="multipartResolver"
class="org.springframework.web.multipart.commons.C
ommonsMultipartResolver">
 <property name="defaultEncoding"
value="utf-8"></property>
 <property name="maxInMemorySize"
value="1024"></property>
 <!-- 单位字节 -->
 <!--
org.springframework.web.multipart.MaxUploadSizeExc
eededException -->
 <property name="maxUploadSize"
value="1000000"></property>
 </bean>
</beans>
View Code

4.5.7web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
ce"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/n
s/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!-- 上下文参数,告诉 Spring 配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContex
t-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context
.ContextLoaderListener</listener-class>
</listener>
<!-- 配置 springmvc -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.
DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</pa
ram-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.Ch
aracterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
View Code

4.5.8配置 tomcat 与资源拷贝插件


4.5.8.1 配置 tomcat 插件

<plugins>
 <!-- 配置 Tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
 </plugins>

4.5.8.2 资源拷贝插件


4.5.8.2.1在 manager-mapper 项目中添加资源拷贝插件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>

4.5.9启动 tomcat 测试框架整合

5 添加业务逻辑


5.1添加用户


5.1.1Manager-controller


5.1.1.1 Controller

/**
* 页面跳转 Controller
* @author Administrator
*
*/
@Controller
public class PageController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page){
return page;
}
}
/**
* 操作 UserController
* @author Administrator
*
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/*
* 添加用户
*/
@RequestMapping("/addUser")
public String addUser(Users user){
this.userService.addUser(user);
return "ok";
}
}
View Code

5.1.1.2 Jsp

<%@ 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="addUser">添加用户</a>&nbsp;&nbsp;&nbsp;<a
href="">查询用户</a>
</body>
</html>
<%@ 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>AddUser</title>
</head>
<body>
<form action="/user/addUser" method="post">
用户姓名:<input type="text" name="username"/><br/>
用户年龄:<input type="text" name="userage"/><br/>
<input type="submit" value="OKOK"/>
</form>
</body>
</html>
<%@ 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>
操作成功。。。。。
</body>
</html>
View Code

5.1.2Manager-service

public interface UserService {
public void addUser(Users user);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(Users user) {
this.userMapper.insertUser(user);
}
}

5.1.3Manager-mapper

public interface UserMapper {
public void insertUser(Users user);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bjsxt.mapper.UserMapper" >
 <insert id="insertUser"
parameterType="com.bjsxt.pojo.Users">
 insert into users(username,userage) 
values(#{username},#{userage})
 </insert>
</mapper>

5.1.4Manager-pojo

public class Users {
private int userid;
private String username;
private int userage;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getUserage() {
return userage;
}
public void setUserage(int userage) {
this.userage = userage;
}
}
View Code

5.2查询用户


5.2.1Manager-controller


5.2.1.1 Controller

/*
* 查询所有用户
*/
@RequestMapping("/findUser")
public String findUser(Model model){
List<Users> list = this.userService.findUser();
model.addAttribute("list", list);
return "showUser";
}

5.2.1.2 Jsp

<%@ page language="java" contentType="text/html; 
charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<!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>showUser</title>
</head>
<body>
<table border="1" align="center">
<tr>
<th>用户 ID</th>
<th>用户姓名</th>
<th>用户年龄</th>
<th>操作</th>
</tr>
<c:forEach items="${list }" var="user">
<tr>
<td>${user.userid }</td>
<td>${user.username }</td>
<td>${user.userage }</td>
<td>
<a href="">修改</a>&nbsp;&nbsp;
<a href="">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
View Code

5.2.2Manager-service

public interface UserService {
public void addUser(Users user);
public List<Users> findUser();
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(Users user) {
this.userMapper.insertUser(user);
}
@Override
public List<Users> findUser() {
return this.userMapper.selectUserAll();
}
}
View Code

5.2.3Manager-mapper

public interface UserMapper {
public void insertUser(Users user);
public List<Users> selectUserAll();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bjsxt.mapper.UserMapper" >
 <insert id="insertUser"
parameterType="com.bjsxt.pojo.Users">
 insert into users(username,userage) 
values(#{username},#{userage})
 </insert>
 
 <select id="selectUserAll"
resultType="com.bjsxt.pojo.Users">
 select * from users
 </select>
</mapper>
View Code

 

https://i-beta.cnblogs.com/posts/edit;postId=10964648

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!