zoukankan      html  css  js  c++  java
  • 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已经不存在。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    Atitit 华为基本法 attilax读后感
    Atitit 华为管理者内训书系 以奋斗者为本 华为公司人力资源管理纲要 attilax读后感
    Atitit 项目版本管理gitflow 与 Forking的对比与使用
    Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理
    Atitit 乌合之众读后感attilax总结 与读后感结构规范总结
    深入理解 JavaScript 异步系列(4)—— Generator
    深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
    深入理解 JavaScript 异步系列(2)—— jquery的解决方案
    深入理解 JavaScript 异步系列(1)——基础
    使用 github + jekyll 搭建个人博客
  • 原文地址:https://www.cnblogs.com/zys2019/p/11448341.html
Copyright © 2011-2022 走看看