• Maven总结


    1.什么是Maven

    Maven是apache下的开源项目,项目管理工具,管理java项目

    maven定义一套项目生命周期:清理、初始化、编译、测试、报告 、打包、部署、站点生成

    2.Maven环境搭建 

    (一)Maven下载

    可以到maven的官网下载   http://maven.apache.org/download.cgi

     我们将下载的压缩包解压到D盘根目录,D盘根目录会有下面的文件夹

    (二)本地仓库配置

    1. 拷贝本地仓库

    在D盘创建一个文件夹,名为repository

    2. 配置本地仓库

    打开maven的安装目录中conf/ settings.xml文件,在这里配置本地仓库:

    <localRepository>D:\repository</localRepository>

    这里的意思是配置本地仓库的目录为D:\repository

    远程仓库配置:

    <mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>*</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>   
    </mirror>

    (三)eclipse配置Maven

    1. 配置Maven的安装目录

    进入eclipse ,选择菜单windows - Preferences , 在左侧的树状导航中

    点击add按钮,弹出窗口后选择maven的安装目录

    然后点击Apply

    2. 配置User Settings

    选择左侧树形导航的User Settings  ,选择Maven目录下conf下的settingsxml

    然后点击Update Settings 、Reindex 和Apply按钮.

    选择菜单 window --> show View

    选择 Rebuild  Index  重新创建索引

    (四)Idea配置Maven

    1、配置maven路径

    2、设置maven仓库

    三、Maven入门

    (一)创建Java工程

    1. 选择菜单  File ->New->Project

      

    坐标包括:

    Group Id:项目的名称,项目名称以域名的倒序,比如:com.gh.maventtest

    Artifact Id:模块名称(子项目名称)

    Version:模块的版本,snapshot(快照版,没有正式发行)、release(正式发行版本)

    点击Finish 。完成后如下图

    工程目录结构说明:

    project

    /src/main/java      主体程序 java源文件(不要放配置文件)

    /src/main/resources  主体程序所需要的配置文件(不要放java文件)

    /src/test/java       单元测试程序 java源文件

    pom.xml          Maven进行工作的主要配置文件。

    2. 编写代码

    1)在src/main/java 目录下创建包com.gh.maventest

    2)在包com.gh.maventest下创建HelloWorld 类

    package com.hp.maventest;
    
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello World!!");
        }
    }

    (二)添加依赖 

    打开pom.xml,输入以下信息

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
    </dependencies>

    我们再看工程目录下的Maven Dependecies 下又多了jar包

    (三)创建web项目

    填写项目名等信息,项目构建完成之后看到如下内容

    注意:使用该模板创建的项目只有web目录没有java资源目录。我们需要在main下创建java目录并把java目录变成classpath目录。另外还要创建一个配置目录,用来存放配置文件,一般名字是resources

    添加之后加入tomcat即可运行这个web项目,运行后显示首页说明创建成功

    (四)项目生命周期

    Maven有三套相互独立的生命周期,分别是:clean、default、site。clean主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点

    (1)clean周期:

    pre-clean:准备清理

    clean:真正的清理工作

    post-clean:执行清理后的一些后续工作

    2default周期:

    validate:验证

    initialize:初始化配置

    generate-sources:生成源代码编译目录

    process-sources:处理项目主资源文件,复制资源文件到outputclasspath

    generate-resources:生成资源目录

    process-resources:处理资源文件

    compile:编译源代码

    process-classes:处理编译后文件

    generate-test-sources:生成测试目录

    process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath

    generate-test-resources:生成测试资源文件

    process-test-resources:处理测试资源文件

    test-compile:编译测试代码

    process-test-classes:处理测试代码

    test:单元测试运行测试代码

    prepare-package:打包前的准备

    package:将编译好的代码打包成为jar或者war或者ear等等

    pre-integration-test:准备整体测试

    integration-test:整体测试

    post-integration-test:为整体测试收尾

    verify:验证

    install:安装到本地Maven库

    deploy:将最终包部署到远程Maven仓库

    3site周期:

    pre-site:准备生成站点

    site:生成站点及文档

    post-site:站点收尾

    site-deploy:将生成的站点发布到服务器上

    (五)常见命令

    maven通过命令对工程进行清理、编译、测试、打包、部署。

    点击工程右键 Run As (或Debug As ) -- >  Maven  Build ... 

    常用命令如下:

      compile:编译

      clean:清理,将target下的class文件清理

      test: 执行单元测试类,执行src/test/java下的类

      package :将java工程打成jar、war。

      install:安装命令,将将程的jar发布到本地仓库

    发布到仓库,目录按照本工程定义的坐标生成目录

    四、使用maven集成ssm

    需要引入的依赖如下,把这些复制到pom.xml中

    <dependencies>
    
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.3.14.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>4.3.14.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.1</version>
        </dependency>
    
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.3.0</version>
        </dependency>
        <dependency>
          <groupId>cglib</groupId>
          <artifactId>cglib</artifactId>
          <version>3.2.2</version>
        </dependency>
        <dependency>
          <groupId>com.mchange</groupId>
          <artifactId>c3p0</artifactId>
          <version>0.9.5.2</version>
        </dependency>
    
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.0</version>
          <scope>provided</scope>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.28</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.6</version>
        </dependency>
    
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>compile</scope>
        </dependency>
    
    </dependencies>

    把已经整合好的ssm项目直接复制到这里,步骤如下:把web.xml中的webapp内容全部复制进来,

    由于这里使用的是c3p0的连接池,因此需要修改连接池的配置,在applicationContext-dao.xml中修改,代码如下:

    在运行时还会报错,找不到User ServiceImpl类,原因是没有加载User Mapper.xml的文件,需要把这个文件放到配置文件夹中,不能放在Java资源目录中,因为它不会去解析。需要注意的是要在配置目录中新建一个和namespace路径相同的文件夹,把这个配置文件放进去,否则还是找不到。这个文件夹要一步步的创建,不能一次性创建。

    配置完成之后运行,能够正常的跑起来实现功能说明已经整合成功,就可以进行分模块整合了。

    五、聚合与继承

    所谓聚合,顾名思义,就是把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven 工程。

    我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入。这时我们采用继承,就不用在每个子模块分别定义了。

    聚合和继承通常是结合使用的,但是其作用是不同的。聚合是将多个模块的工程汇聚到一起,而继承则是指明某个模块工程要继承另一个模块功能

    构建多模块Maven工程(重点)

    6.1创建Maven父工程模板

    先创建一个名为parentmaven项目,记得进入settings修改maven配置,在pom.xml中添加一行代码,表明这是一个父工程,那么它不能用来开发,不能有jar包或war包,是一个管理者,需要在里面新建模块。

    然后在项目上右键创建一个模块,名为son1

     

    创建之后,查看parent的pom文件,此时多了一个模块,parent下载管理son1,创建多个模块就构成了聚合.

    son1的pom文件中有parent的配置,这里就继承了父类,有聚合不一定有继承,有继承也不一定有聚合,

    工程创建完成后打开pom.xml ,添加内容

    <!--设置jdk的版本是1.8-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!--导入依赖-->
    <dependencies>
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
    
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.2</version>
        </dependency>
    
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
       </dependency>
    </dependencies>

    然后在son1中创建一个工具类,点击install放到仓库中,在son2中依赖之后就可以使用这个工具类。如果多个子模块同时依赖某些相同的jar包,那么可以把这些依赖放在父类的配置中,子模块中都会自动依赖这些jar包。如果添加dependencyManagement这个标签,那么可以进行依赖管理,在需要依赖的子模块中添加依赖,实现版本的控制管理。也可以把版本号抽取出来,实现版本的统一

    <!--抽取共有的版本号-->
    <properties>
        <sprimg.version>4.3.14.RELEASE</sprimg.version>
    </properties>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <!--使用共有的版本号-->
        <version>${sprimg.version}</version>
    </dependency>

    模板创建成功之后就可以参考步骤创建下面的模块。一共需要建立4个子模块:

      entity   存放实体包

      dao      存放数据访问接口及实现类

      service   存放业务逻辑层接口及实现类

      web     存放action类代码和前端代码  (注意:此模块的packaging选择war)

    把写好的ssm工程按照模块划分到每一个项目中

    第一步:创建一个maven的java项目,添加<packaging>pom</packaging>到配置文件

    第二步:创建entity等模块,web需要创建web工程,引用模板

    第三步:依赖

    6.2模块之间的依赖

    依赖关系:web-->service-->dao-->entity

    选中parent创建install放到仓库中,然后依次设置依赖。

    修改web.xml配置,让其加载所有配置文件:

    classpath 和 classpath* 区别:
    classpath:只会到你指定的class路径中查找找文件;
    classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

    项目的分层图

    6.3运行测试及打

    选择parent工程,执行命令package 进行打包(war),添加tomcat,运行项目进行测试。

    七、依赖管理

    (一)依赖范围

    依赖范围是用来控制依赖与3种classpath(编译classpath,测试classpath,运行classpath)的关系。maven有以下几种依赖范围:

    1、compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖。

    strus-core、spring-beans。打到war包或jar包。

    2、provided 编译、和测试有效,A在编译和测试时需要B。

    比如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)。不会打到war。

    3、runtime:测试、运行有效。

    比如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用。

    在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的!!会打到war。

    4、test:只是测试有效,只在单元测试类中用。

    比如:junit。不会打到war。

    如何设置依赖范围呢?

    比如我们要将mysql驱动的依赖设置为runtime范围,配置如下:

        <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.6</version>
              <scope>runtime</scope>
          </dependency>

    servlet依赖设置为provided

    <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>servlet-api</artifactId>
              <version>2.5</version>
              <scope>provided</scope>
    </dependency>

    如果是compile就不需要设置了,因为compile是scope的默认值。关于test范围我们在后边讲解单元测试时再做演示。重新执行打包为war , 会发现servlet-api.jar已经不存在。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    第八周
    请停止使用strncpy
    WER设置
    如何在dump文件里找到真正的类this指针
    Visual Studio /analyze不好之处---漏报(四)
    Visual Studio /analyze不好之处---漏报(三)
    Visual Studio /analyze不好之处---漏报(二)
    Visual Studio /analyze不好之处(一)
    Visual Studio /analyze的好处
    符号杂谈
  • 原文地址:https://www.cnblogs.com/zys2019/p/11448341.html
Copyright © 2020-2023  润新知