07.SSM框架集~Maven
本文是上一篇文章的后续,详情点击该链接
本章资料 提取码:9rqj
Maven
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶(phase)中插件(plugin)目标(goal)的逻辑。
传统方式中项目jar包资源的问题:
问题一:
项目中的jar包资源需要我们自己从网上下载后,手动导入到项目中使用,一旦jar包资源过多,容易造成遗漏并且不好管理。
问题二:
假如我们有两个项目,项目A和项目B,如果项目A中需要使用项目B 中的某些资源,需要我们自己手动的将项目B中的资源导出为jar包,然后手动导入到A项目中,比较麻烦。
解决方案:
Maven项目资源管理工具
maven与ant有什么不同:
Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。总的来说:
第一:ant脚本是可以直接运行在maven中的。maven和ant最大的差别就是在于maven的编译以及所有的脚本都有一个基础,就是POM(project object model)。这个模型定义了项目的方方面面,然后各式各样的脚本在这个模型上工作,而ant完全是自己定义,显然maven更胜一筹。
第二:Maven对所依赖的包有明确的定义,如使用那个包,版本是多少,一目了然。而ant则通常是简单的inclde 所有的jar。导致的最终结果就是,你根本无法确定JBoss中的lib下的common-logging 是哪个版本的,唯一的方法就是打开 META-INF 目录下MANIFEST.MF。
第三:Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld,pom,等。当编译的时候,maven会自动在仓库中找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载到本地。这一切都是自动的,而ant需要自己定义了。这个好处导致的结果就是,用maven编译的项目在发布的时候只需要发布源码,小得很,而反之,ant的发布则要把所有的包一起发布,显然maven又胜了一筹。
第四:maven有大量的重用脚本可以利用,如生成网站,生成javadoc,sourcecode reference,等。而ant都需要自己去写。
Maven 的优点:
1. 简化了项目依赖管理:jar包管理,防止了冲突
2. 便于与持续集成工具(jenkins)整合
3. 便于项目升级,无论是项目本身升级还是项目使用的依赖升级。
4. 有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。
5. maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等
Maven的基本原理图
Maven的专业术语:
中央仓库(Central Repository), 官方维护, 存放所有相关的jar包(包含各个版本)
本地仓库(Local Repository), maven项目都是从本地仓库加载jar包的.
镜像仓库(Mirror Repository), 国内有能力的组织(机构)搭建的仓库, 这个仓库就是将中央仓库中的所有内容复制了一份存起来.
jar包的定位: 座标, 三部分构成
GroupId: 一般是逆向公司域名 com.alvin
ArtifactId: 一般是项目(jar)名 mybatis-3.5.2
Version: 版本号 3.5.2
Maven的下载
为了使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。通过百度搜索“Maven“如下
点击 Download 链接,就可以直接进入到 Maven 软件的下载页面
将maven的压缩包解压到指定的文件夹中,尽量全英文路径
maven的目录介绍
bin: Maven操作指令,集成IDE后可以在IDE中调用
conf: maven的配置文件,可以配置maven的本地仓库地址和云仓库地址,以及maven的jdk版本等,项目的编译是maven来调用JDK完成编译,不再是idea工具来调用jdk编译
配置Maven仓库
<?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>E:/Repository</localRepository>
<mirrors>
<!-- 配置镜像仓库地址 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<!-- 配置jdk版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</settings>
在idea中集成maven
优化处理 -DarchetypeCatalog=internal
Maven的项目类型
传统项目类型
JAVASE项目:
用来开发java项目的目录结构体系,项目的结构体系是给我们的JDK工具来看的。
JAVAEE项目:
是一个web项目,该项目的运行不仅仅需要JDK的支持还需要服务器容 器的支持。该项目的结构体系给服务器来查看的。
Maven项目类型
jar: java工程, 项目最终被打包为jar包
war: web工程, 项目被打包为war包
pom: 逻辑工程, 父工程必须是pom类型的工厂. pom工程中不写java代码, 值用于进行子工程的管理.
Maven project的创建和使用
Maven的jar类型的项目
1.创建jar类型项目
点击file-->new-->moudle-->maven,然后点击下一步即可
填写当前创建的maven项目的资源座标,便于其他项目来调用我们的项目资 源。
分别对应域名,项目名和版本号,上面有介绍
点击finish完成创建,然后在右下角的提示中点击import Changes
jar类型项目的结构
jar类型项目的特点
jar类型的项目,相当于JAVASE项目
jar项目编译后的项目结构体系和原有的JAVASE项目编译后的结构体系相 同
默认在test目录下的测试代码是不会编译到项目中的。
Maven的war类型项目
maven的war类型项目的创建
一直点击下一步,和jar差不多。记得在窗口中点击import changes
在war项目下的src下的main目录下手动创建java和resources目录。
java目录作为java源码存方法目录
resources目录作为配置文件目录
war类项目项目的特点
相当于我们以前的JAVAEE项目,完成web项目的开发。
项目编译后的结构体系和原有的JAVAEE项目编译后的结构体系是相同的, 也就说我们maven的war类型项目编译后的资源也可以直接在tomcat中使用
pom文件的配置内容
modelverson:声明模块的版本
当前项目的资源座标:给maven查看 ,并便于maven查找到该项目给其他项目使用
配置第三方的资源座标:让maven根据座标从本地仓库中引入第三方的资源到项目中使用,如果本地仓库中没有,则会自动从云仓库中下载
我们可以在https://mvnrepository.com/下来搜索需要的资源座标,然后当我们将资源座标变更后,需要点击import changes让maven重新加载pom文件,根据最新的资源座标获取资源到项目中
maven将资源引入到项目中后,在idea的项目视图中是看不到第三方资 源的,需要点击idea右侧栏上的maven,进入maven的资源管理视 图中,查看当前项目中引入的第三方的资源。
properties自定义资源版本号管理
一个第三方资源会有很多的版本,比如mybatis,spring等如果我们需要引入的第三方资源过多,当我们对某一个资源的版本号进行修改时,不好修改。可以使用properties标签将资源的版本号单独 的声明在外部,便于我们的修改。
在以前的JAVAEE项目中,IDE工具会自动的将JDK以及tomcat的资源依赖到项目中,我们在web-inf下的lib文件夹下声明的是自定义的第三方资源,而maven中的war类型项目中默认是没有给我们引入任何第三方资源的,造成我们在war类型项目中无法直接创建jsp和声明Servlet完成最基本的web开发。
配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<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.bjsxt</groupId>
<artifactId>02_maven_war</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--配置版本号-->
<properties>
<servlet-version>3.1.0</servlet-version>
<jsp-version>2.2</jsp-version>
<jstl-version>1.2</jstl-version>
</properties>
<!--配置资源座标-->
<dependencies>
<!--servlet的资源座标-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-version}</version>
<scope>provided</scope>
</dependency>
<!--jsp的资源座标-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
<scope>provided</scope>
</dependency>
<!--jstl的资源座标-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>6060</port><!--配置tomcat启动的端口号-->
<path>/my</path><!--配置项目的访问名称-->
</configuration>
</plugin>
</plugins>
</build>
</project>
运行一下Servlet吧~
我们现在导入一下数据库jar包试试
<?xml version="1.0" encoding="UTF-8"?>
<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.alvin</groupId>
<artifactId>maven_jar</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
</project>
public class Test {
public static void main(String[] args) {
StudentMapper studentMapper = DBUtil.getSqlSession().getMapper(StudentMapper.class);
List<Student> list = studentMapper.FindAll();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
maven指令的生命周期
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
常用指令
clean:清除maven项目下的target目录中的class和本地仓库中已打包的文件。
validate:验证工程是否正确,所有需要的资源是否可用。
compile:即编译项目中的java文件,并存放在项目的编译目录。
deploy:将打包在本地仓库中的项目发布到服务器,供他人依赖使用
test: 即运行项目中的测试用例文件,如果测试用例未通过,也会打包失败,这里test过程可以在pom中通过配置跳过。
package:将本地编译好的文件打包为war 或者jar。
verify: 运行任何检查,验证包是否有效且达到质量标准。
install:将打包的代码存放到本地maven仓库,可供本地其它项目依赖使用。
site:生成项目报告,站点,发布站点。