07.SSM框架集~Maven的初步使用

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:生成项目报告,站点,发布站点。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章