maven

Posted 1877chl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven相关的知识,希望对你有一定的参考价值。

1.Java开发项目需要做的工作?
    1.分析项目要做什么,知道项目有哪些组成部分
    2.设计项目,通过哪些步骤,哪些技术,需要多少人,多长时间
    3.组建团队,招人,购置设备,服务器,软件等等
    4.开发人员写代码,然后测试自己写的代码,重复。。
    5.测试人员测试代码,重复

2.传统的项目开发的问题,没有使用maven管理
    1.很多模块,模块之间有关系,手工管理关系,很繁琐
    2.需要很多第三方功能,需要很多jar包,需要手工从网络获取jar包
    3.需要管理jar包的版本
    4.管理jar包之间的依赖,你的项目要使用a.jar ,需要使用b.jar里面的类,必须首先获取b.jar才可以,然后才能使用a.jar

3.改进项目开发,使用maven,
    1.maven可以管理jar文件
    2.自动下载jar和它的文档,源代码
    3.管理jar直接的依赖,a.jar需要b.jar。maven会自动下载b.jar
    4.管理你需要的jar版本
    5.帮你编译程序,把Java编译为class
    6.帮你测试你的代码是否正确
    7.帮你打包文件,形成jar文件,或者war文件
    8.帮你部署项目
总结:管理jar包,编译,测试,打包,部署;

4.构建;项目的构建
    构建是面向过程的,就是一些步骤,完成代码的编译,测试,运行,打包,部署等等。maven支持的构建包括有:
    1.清理:把之间羡慕编译的东西删除掉(target),为新的编译代码做准备 mvn clean
    2.编译:把程序源代码编译为执行大妈(编译的是src/main下的Java),Java.class文件  mvn compile  mvn test-compile
    javac不一样,它一次只能编译一个文件
    3.测试:maven可以执行测试程序代码,验证你的功能是否正常,批量的,maven同时执行多个测试代码,同时测试很多功能(测试的是test/java下的程序)   mvn-test
    4.报告:生成测试结果的文件,测试通过没有
    5.打包:把你 的项目中的结果文件,通常是Java程序,压缩文件是jar扩展名的,对于web应用,压缩文件扩展名是.war  mvn package
    6.安装:把5中生成的文件jar/war安装到本机仓库  mvn install
    7.部署:把程序安装好可以执行;  mvn deploy

5.maven的核心概念:用好maven,用好这些概念
    1.POM:一个文件,名称是pom.xml,pom(project object model)翻译过来叫做项目对象模型,maven把一个项目当一个模型使用,控制maven构建项目的过程,管理jar依赖;
    2.约定的目录结构:maven项目的目录和文件的位置都是规定的
    3.坐标:唯一的字符串,用来表示资源的(groupID,artifactID,version)
    4.依赖管理;管理你的项目可以使用jar文件
    5.仓库管理:(了解)你的资源存放的地方
    6.生命周期:(了解)maven工具构建项目的过程
    7.插件和目标:(了解)执行maven构建的时候使用的工具是插件
    8.继承
    9.聚合

6.maven工具的配置:
    1.需要下载maven安装包,解压安装包,解压到一个非中文的目录
    2.配置环境变量:在系统的环境变量中,指定一个M2_HOME的名称,指定它的值是maven工具安装目录,bin之前的目录;M2_HOME    =E:apache-mavenapache-maven-3.5.2,在把M2_HOME    加入到Path中    
    3.验证;在cmd中输入mvn -v
还不懂;https://www.bilibili.com/video/BV1dp4y1Q7Hf?p=6

7.maven约定的目录结构,约定是大家都遵循的一个规则
1)maven项目在磁盘中都是一个文件夹(项目-hello)
hello/
    --/src
        --/main  #放主程序Java代码和配置文件
             --/java  #程序包和包中的Java文件
         --/resource  #Java程序中要使用的配置文件
        --/test
         --/java  #测试程序包和包中的Java文件
         --/resource  #测试Java程序中要使用的配置文件
    --/pom.xml  #maven的核心文件(maven项目必须有)

8.疑问:mvn.compile编译src/main目录下所有的Java文件的
    1.为什么要下载?
    maven工具执行的操作需要很多插件
    2.下载了什么?
    jar文件--叫做插件--完成某些功能
    3.下载的东西放到了哪里?
    默认仓库中(本机仓库):C:UsersAdministrator.m2 epository

    执行mvn compile ,结果是在项目的根目录下生成一个target目录,叫结果目录,是maven编译的Java程序,最后的class

9.设置本机存放资源的目录位置;
    1.先将Setting.xml备份;
    2.E:apache-mavenmaven_repository拷贝
    3.进入Setting.xml中,找到<localRepository>修改;注意格式;

10.仓库
    1.仓库是什么?:是存放东西的,存放maven使用的jar包,,maven使用的插件和项目中使用的jar

    2.仓库的分类:
        1.本地仓库:就是你的个人电脑上的文件夹,存放各种jar
        2.远程仓库:
            1).中央仓库:在互联网上,使用网络才能使用的仓库,是做权威的,所有的开发人员都共享使用的一个集中的仓库;也叫中央仓库
            2).中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都是镜像,目的是为了减轻中央仓库的压力;
            3.私服:在公司内部,在局域网中使用,不对外使用;在公司中搭建一个服务器,用自己的服务器中的仓库;(有能力的公司推荐)

11.仓库的使用;maven仓库的使用【不需要人为参与】
    开发人员需要使用mysql的驱动--maven首先查本地仓库是否有对应的jar包--私服--镜像----中央仓库(直到找到为止)

12.pom:项目
    groupId,artifactId和Version组成一个坐标,在互联网中标识唯一项目;每个项目必须有坐标;
<groupId>com.bjpowernode</groupId> #公司域名的倒写
<artifactId>welcome</artifactId>   #自定义项目名称
<version>1.0-SNAPSHOT</version>    #自定义版本号;

    www.mvnrepository.com:搜索使用的中央仓库,使用groupid或者artifactID作为搜索条件;
packing:打包后压缩文件的扩展名,默认是jar,web应用是war,可以不写
dependencies和dependency;你的项目中要使用的各种资源说明;相当于是Java中的import
<dependencies>
<!--是我们项目中要使用的MySQL驱动jar包,我们从官网上利用坐标来获取文件,下载-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>
</dependencies>

properties:定义一些配置属性,例如字符集等;
<properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>12</maven.compiler.source>
      <maven.compiler.target>12</maven.compiler.target>
</properties>

build:maven在进行项目的构建时,配置信息,

13.maven生命周期,maven的命令,maven的插件
    1.生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,都是
    2.命令:maven独立使用,通过命令,完成maven的生命周期的执行、maven可以使用命令,完成项目的清理,编译,测试等;
    3.插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类

14.单元测试(测试方法);
    1.Junit,是一个专门测试的框架(工具),测试的是类中的方法,每一个方法都是独立测试的;方法是测试的基本单位(单元);然后maven借助单元测试批量测试方法是否符合预期;
    2.使用步骤:
        1.加入依赖:在pom。xml中
        2.在maven项目中的src/test/java 目录下,创建测试程序。推荐的创建类和方法的提示;
        1.测试类的名称,是Test+你要测试的类名
        2.测试的方法名称是:Test+方法名称;

        例如你要测试hellomaven。创建测试类:Testhellomaven
        @Test
        public void testAdd(){
            测试hellomaven的add方法是否正确
}
其中testadd方法叫做测试方法,它的定义规则
        1.方法是public的,必须是;
        2.方法没有返回值,必须是
        3.方法名称是自定义的,推荐是Test+方法名称
        4.在方法的上面加注释;@Test

15.mvn compile:编译main/java/目录下的Java为class,同时把class拷贝到target/classes目录下,把main/resources目录下所有文件都拷贝到target/classes下

16.在IDEA中设置maven,让IDEA和maven结合使用。IDEA中有一个内置的maven,一般不使用内置的。因为内置的修改maven的配置不方便。使用自己安装的maven,需要覆盖IDEA的默认的设置,让IDEA指定maven的安装;

17.配置入口;settings(配置当前)--Build,Execution。Deployment--Build Tools--Maven--在这里我们配置maven的home,settings和本地仓库--Runner--配置jre和VM Option(填写 -DarchetypeCatalog=internal)
 -DarchetypeCatalog=internal:maven项目在创建时,会联网下载一个模板文件,比较慢,加上后变快

18.使用模板创建普通的JavaSe项目;maven-archetype-quickstart
创建web工程:maven-archetype-webapp

19.Reimport:重新导入,相当于刷新功能,用于项目中内容的更变时IDEA没响应;

20.依赖范围;使用scope表示
    1.scope的值有;compile ,test ,provided  默认是compile
    2.scope表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用
        maven构建项目:清理 编译 测试 打包 安装 部署
举例:
//Junit依赖的范围是test阶段
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>

compile;所有阶段都会用到,
provided:编译 测试阶段要用,后续阶段不要用;(也就是Tomcat本身有,不需要自带)

21.在pom文件中添加依赖,maven会时刻自动检测pom文件,所以,当我们在pom文件中添加依赖,maven会自动下载依赖存入本地仓库;

22.maven的常用操作:
    1.maven的属性设置:<properties>设置maven的常用属性
    2.maven的全局变量:1.在<properties>通过自定义标签声明变量(标签名就是变量名)
               2.在pom.xml文件中的其他位置,使用${标签名}使用变量的值;
               3.自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,在使用${变量名}
    3.资源插件:
<resources>
            <resource>
                <!-- 指定resources插件处理哪个目录下的资源文件 -->
                <directory>src/main/java</directory>
                <!--注意此次必须要放在此目录下才能被访问到 -->
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
在mybatis课程中涉及到;默认没有使用resources的时候,maven执行编译代码时,会把src/main/resources目录中的文件到target/classes,对于Src/main/java下的非Java文件不处理,不拷贝到target/classes目录中;

    2.我们的程序有需要把一些文件放在:src/main/java目录中,当我们在执行Java程序时,需要用到src/main/java目录中的文件,就要告诉麻烦在mvn.compile  src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中,此时就需要在<build>中加入<resources>



以上是关于maven的主要内容,如果未能解决你的问题,请参考以下文章

Mavenmaven简介

mavenmaven jar 包 冲突 的解决方式

Maven实战之初识MavenMaven的简单介绍

MavenMaven四大特性

mavenmaven pom文件详解

mavenmaven各种奇葩问题