zoukankan      html  css  js  c++  java
  • maven自动化构建工具

    目录结构:

    一、Maven简介

    二、Maven核心概念

    三、Maven的使用

    四、Maven在IDEA中的应用

    五、依赖管理

    六、Maven常用设置

    ---------------------------------------分割线:正文--------------------------------------------------------

     一、Maven简介

    1、Maven可以管理jar包文件,自动下载jar和他的文档,源代码。

    2、Maven可以管理jar包之间的依赖、jar包的版本

    3、Maven的构建:

    (1)清理:把之前项目编译的东西删除掉。

    (2)编译:把程序代码编译为执行代码,java-class文件

    (3)测试:maven可执行测试程序代码,验证你的功能是都正确

    (4)报告:生成测试结果的文件

    (5)打包:把项目中所有class文件,配置文件等所有资源放到一个压缩文件中,java程序压缩文件通常是jar或war包

    (6)安装:把打包的文件安装到本地仓库

    (7).部署:把程序安装好可以执行

    4、Maven核心概念:

    (1)POM:pom.xml,项目对象模型,控制maven构建项目的过程,管理jar依赖

    (2)约定的目录结构:maven项目的目录和文件的位置都是规定的

    (3)坐标:唯一的字符串,用来表示资源

    (4)依赖管理:管理项目中使用的jar文件

    (5)仓库管理:资源存在的位置

    (6)生命周期:maven构建项目的过程

    (7)插件和目标:执行maven构建的时候用的工具

    (8)继承与聚合:类似java语法

    5、maven工具的安装和配置:

    (1)官网下载:

    https://maven.apache.org/download.cgi

    (2)解压安装包:非中文目录

    子目录bin:执行程序mv.cmd

    conf:maven工具配置文件settings.xml

    (3)配置环境变量:

    在系统的环境变量中新增maven工具的安装目录,并在path中新增:

    MAVEN_HOME -> D:Program Files (x86)apache-maven-3.8.1

    path -> %MAVEN_HOME%in

    验证配置成功:cmd -> mvn -v

     

    二、Maven核心概念

    1、maven约定的目录结构(项目-Hello)

    Hello/

        ---/src

     ------/main              #主程序java代码和配置文件

        ----------/java          #程序包和包中的java文件

        ----------/resource   #java程序中使用的配置文件

        ------/test                #放测试程序代码和文件的(可以没有)

        ----------/java          #测试程序包和包中的java文件

        ----------/resource  #测试java程序中使用的配置文件

        ---/pom.xml maven的核心文件(必有)

    PS D:javaProjects> tree Hello
    卷 软件 的文件夹 PATH 列表
    卷序列号为 00000073 AEF0:3DBD
    D:JAVAPROJECTSHELLO
    └─src
        ├─main
        │  ├─java
        │  └─resources
        └─test
            ├─java
            └─resources
    PS D:javaProjects>

    2、仓库:

    (1)仓库概念:存在maven使用的jar和项目使用的jar

    (2)仓库分类:本地仓库与远程仓库

    (3)仓库的使用:仓库的使用不需人为参与,需要jar包时访问顺序:本地仓库->私服->镜像->中央仓库

    3、POM:Maven的灵魂

    (1)modelVersion:目前的版本4.0

    (2)groupId:组织名称,一般为公司域名倒写(+项目名称)

    (3)artifactId:项目名称

    (4)version:项目版本号,通常为-SNAPSHOT

    (5)packaging:项目打包类型:jar、war、rar、ear、pom,默认jar

    (6)<dependencies><!- -依赖- -相当于import></dependencies>
    (7)properties:定义一些配置属性,如项目编码方式等

    (8)bulid:maven构建时一些配置信息,如编译插件啊的jdk版本

    其中:groupId+artifactId+version为坐标

    https://mvnrepository.com/ 搜索使用的中央仓库

    4、Maven生命周、Maven常用命令、Maven插件:

    (1)maven的生命周期即Maven构建项目的过程:清理、编译、测试、报告、打包、安装、部署的过程

    (2)maven的命令:Maven可以使用命令,完成项目声明周期的执行

    (3)maven的插件:maven命令的执行,通过相应的jar来完成

    清理(会删除原来编译和测试的目录),即target目录,但是

     

    三、Maven的使用

    1、mvn compile:编译src/main目录下所有java文件

    (1)编译时下载JAVA插件

    (2)下载插件,存放在本机默认仓库:C:UsersMr.White.m2 epository

    (3)结果在项目根目录下生成target目录,maven编译的java程序,class文件。

    D:javaProjectsHello>mvn compile
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------< com.testbk:testjava >-------------------------
    [INFO] Building maven 0.0.1-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testjava ---
    [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testjava ---
    [INFO] Nothing to compile - all classes are up to date
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  0.750 s
    [INFO] Finished at: 2021-04-21T22:20:01+08:00
    [INFO] ------------------------------------------------------------------------

    2、设置本机存放资源的目录位置:

    修改maven配置文件,安装目录:/conf/setting.xml文件,新增

    <localRepository>D:/maven-repository</localRepository>

    3、添加mysql资源依赖

    pom文件内添加:

        <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
            </dependency>
        </dependencies>

    4、Maven常用命令:(必须在pom文件所在目录下执行)

    (1)mvn clean:清理(删除原来编译和测试的目录,即target目录,但是已经install到仓库里的包不会删除)

    (2)mvn compile:编译主程序(会在当前目录下生成一个target,里面存放编译主程序之后生成的字节码文件)main/java目录下程序

    (3)mvn test-compile:只编译test程序 test/java目录下的程序

    (4)mvn test:测试

    clean到test的部署参考:Junit单元测试

    (5)mvn package:打包主程序,会编译、测试并打包主程序(scr/main下所有java程序),放入target目录下

    [INFO] Building jar: D:javaProjectsHello	arget	estjava-0.0.1-SNAPSHOT.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  10.630 s
    [INFO] Finished at: 2021-04-25T22:17:33+08:00
    [INFO] ------------------------------------------------------------------------

    (6)mvn install:安装主程序,会把本工程打包,并保存到本地仓库中。

    [INFO] Installing D:javaProjectsHello	arget	estjava-0.0.1-SNAPSHOT.jar to C:UsersMr.White.m2
    epositorycom	estbk	estjava.0.1-SNAPSHOT	estjava-0.0.1-SNAPSHOT.jar
    [INFO] Installing D:javaProjectsHellopom.xml to C:UsersMr.White.m2
    epositorycom	estbk	estjava0.0.1-SNAPSHOT	estjava-0.0.1-SNAPSHOT.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  9.078 s
    [INFO] Finished at: 2021-04-25T22:44:03+08:00
    [INFO] ------------------------------------------------------------------------

    (7)mvn deploy:部署主程序,会把本地工程打包,按照坐标保存到本地库,并且还保存到私服仓库中。(使用较少)

    5、插件配置:build :maven-compiler-plugin

    <build>
        <plugins>
            <plugin>
            <!-- 指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 --> 
            <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            <compilerArgs>
            <arg>-parameters</arg>
            </compilerArgs>
            </configuration>
        </plugin>
        </plugins>
    </build>

     

    四、Maven在IDEA中的应用

    1、idea中设置maven

    idea中内置了maven,但一般不使用内置的,因为修改配置不方便;所以使用自己安装的maven,需覆盖idea中默认的设置,让idea指定maven安装位置等信息

    idea配置入口:

    (配置当前工程)File - > Settings - > Build,Execution,Deployment - > Build Tools -> Maven

    (配置以后新建工程)File -> New Projects Settings -> Settings for New Projects -> Build,Execution,Deployment - > Build Tools -> Maven

    Maven home directory:maven的安装目录

    User settings file:mavne安装目录conf/setting.xml配置文件

    Local respository:本机仓库的目录位置

    Running -> JRE-1.8;VM Options:-DarchetypeCatalog=internal(提高maven创建效率,不再下载)

    2、idea创建项目:

    普通java项目:new->project->Empty Project->新建工程->Finish

    maven模块:Module->New Module->Maven->Greate from archetype->maven-archetype-quickstart->新建工程->填写maven工程的坐标->Finish

    等待maven自动创建工程模板

    main目录下手动创建resource包,并设置Make Directory as->Resources Root

    test目录下手动创建resource包,并设置Make Directory as->Test Resources Root

     3、idea单元测试

    分别在main目录与test目录中建立程序与测试代码

    package com.testbk;
    
    public class HelloMaven {
        public int add(int n1,int n2){
            return n1+n2;
        }
        public static void main(String[] args) {
            HelloMaven hello = new HelloMaven();
            int res = hello.add(10,20);
            System.out.println("10+20="+res);
        }
    }
    package com.testbk;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    public class TestHelloMaven {
    
        @Test
        public void testAdd(){
            System.out.println("========testAdd 测试add方法=================");
            HelloMaven hello = new HelloMaven();
            int res = hello.add(10,20);
            //判断结果是否正确
            Assert.assertEquals(30,res);
        }
    }

    运行程序测试通过:

     4、idea-maven工具窗口

    使用工具窗口可完成:clean、compile、test、package、install等操作

     5、idea使用技巧

    (1)pom文件存在问题:

    pom.xml右键->Maven->Reimport(单个项目刷新)

    或-右侧Maven窗口->刷新(会刷新全部项目)

    (2)删除模块与导入模块

    右上角:Project Structure->+/-

     

     五、依赖管理

     1、依赖的范围:

    使用scope表示:表示依赖使用的范围,即在maven构建的项目中的哪些阶段中起作用。

    值包含compile、test、provided(提供者),默认采用compile(所有阶段)。如junit的依赖范围是test

        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>

    2、举例使用:Mybatis-sprint/druid

        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>2.0.4</version>
        </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.22</version>
    </dependency>

     

    六、Maven常用设置

    1、属性设置:<properties>与</properties>内

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> :maven构建项目使用的编码方式,避免中文乱码

    <maven.compiler.source>1.7</maven.compiler.source>:编译代码使用的jdk版本

    <maven.compiler.target>1.7</maven.compiler.target>:运行程序使用的jdk版本

    2、全局变量:

    自定义的属性,在<properties>中通过自定义标签声明变量(标签名就是变量名),在pom.xml文件中的其他位置,使用${标签名}使用变量的值

    自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,

    先使用全局变量定义,在使用${变量名},如spring框架

      <properties>
        <!--自定义变量,表示版本号-->
        <spring.version>5.3.6</spring.version>
      </properties>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
      </dependencies>

    3.指定资源的插件

    在<build></build>中指定资源的插件resources

    (1)默认没有使用resources的时候,maven执行编译代码的时候,会把src/main/resources目录中的文件拷贝至target/classes目录中。

      对于src/main/java目录下的非java文件不处理,不拷贝到target/classes目录中

    (2)我们的程序有需要把一些文件放在src/main/java目录中,当执行java程序时,需要用到src/main/java目录中的文件,

      需要告诉maven在mvn compile src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中。

      此时就需要在<build>中加入<resources>

        <resources>
          <resource>
            <directory>src/main/java</directory><!-- 所在的目录-->
            <includes><!--包含目录下的.properties,.xml文件都会扫描到-->
            <include>**/*.properties</include>
              <include>**/*.xml</include>
            </includes>
            <!--filtering 选项false不启用过滤器,*.property已经起到过滤的作用-->
            <filtering>false</filtering>
          </resource>
        </resources>

     

  • 相关阅读:
    tomcat7简单优化
    java向上转型和向下转型
    字符串循环移位
    测试覆盖率问题
    悬挂指针
    标准库string的用法探讨
    野指针问题
    Clock函数用法
    配置信息写入到.ini文件中的方法
    数组指针和数组引用做参数的区别
  • 原文地址:https://www.cnblogs.com/mrwhite2020/p/14675087.html
Copyright © 2011-2022 走看看