maven学习笔记

maven

maven是一个构建项目的工具。

1.maven作用

1.可以管理jar文件

2.自动下载jar和他的文档,源代码

3.管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar

4.管理你需要的jar版本

5.帮你编译程序,把java编译为class

6.帮你测试你的代码是否正确

7.帮你打包文件,形成jar文件或者war文件

8.帮你部署项目。

maven的构建:

构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。

构建过程的几个主要环节

①清理:删除以前的编译结果,为重新编译做好准备。

②编译:将Java源程序编译为字节码文件。maven可以同时把成百上千的文件编译成java-class文件,和javac不一样,javac一次只能编译一个文件。

③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。可以同时执行多个测试代码,同时测试多个功能。

④报告:在每一次测试后以标准的格式记录和展示测试结果。

⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应war包。

⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。

⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

Maven核心概念

1.POM:一个文件 名称是pom.xml。pom翻译过来是项目对象模型。maven把一个项目当做是一个模型使用。可以控制maven构建项目的过程,管理jar依赖。

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

3.坐标:是一个唯一的字符串,用来表示资源的

4.依赖管理:管理你的项目可以使用jar文件

5.仓库管理:资源存放的位置

6.生命周期:maven工具构建项目的过程,就是生命周期

7.插件和目标:执行maven构建的时候用的工具是插件。

8.继承

9.聚合

仓库

仓库是存放东西的,存放maven使用的jar和我们项目使用的jar

包括:maven使用的插件(各种jar),自己项目中使用的jar(第三方的工具)

仓库分类:

本地仓库:即个人计算机上的文件夹,存放各种jar

远程仓库:在互联网上,使用网络才能使用的仓库

1.中央仓库:最权威的,所有开发人员都共享使用的一个集中地仓库。

https://repo.maven.apache.org:中央仓库的地址

2.中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都有镜像。

3.私服:在公司内部,在局域网中使用的,不对外使用。

maven仓库的使用不需要人为参与

POM文件

即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中 进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和 操作都是关于 pom.xml 的。

pom.xml的基本信息:

坐标(gav):唯一值,在互联网中唯一标识一个项目的。

<artifactId>公司域名的倒写</artifactId>
<groupId>自定义项目名称</groupId>
<version>自定义版本号</version>

modelVersion:Maven模型的版本,对于Maven2和Maven3来说,他只能是4.0.0

groupId:组织id,一般是公司的域名的倒写

artifactId:项目名称,也是模块名称,对应groupId中项目中的子项目

version:项目的版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT,version使用三位数字标识,例如1.1.0

packaging:项目打包的类型,可以使用jar、var、rar、ear、pom,默认是jar

https://mvnrepository.com/搜索使用的中央仓库,使用groupId或者artifactId作为搜索条件。

依赖:dependencies和dependency,项目中要使用的各种资源说明,相当于Java中的import

配置属性:properties,properties 是 用 来 定 义 一 些 配 置 属 性 的 , 例 如 project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。

构建:build,build表示与构建相关的配置,例如设置编译插件的jdk版本

继承:parent,在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、 version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机 制,用 parent 声明要继承的父工程的 pom 配置。

聚合:modules:在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一 个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的 其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有 模块,叫 Maven 的聚合。

maven的生命周期,maven的命令,maven的插件

maven的生命周期:就是maven构建项目的过程:清理,编译,测试,报告,打包,安装,部署。

Maven的命令:maven独立使用,通过命令,完成Maven的生命周期的执行,maven可以通过命令完成项目的清理,编译,测试等等。

maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类。

junit

junit是一个专门测试的框架(工具),

junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的,方法是测试的基本单位(单元)。

maven借助单元测试,批量的测试你类中的大量方法是否符合预期。

插件

插件可以在自己的项目中设置,最常使用的是 maven 编译插件。设置项目使用的 jdk 版本时通过编译插件指定。

pom.xml 文件<build>中设置。

<build> 
   <!--配置插件-->
    <plugins>
        <!--配置具体的插件-->
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <!--插件的名称-->
        <artifactId>maven-compiler-plugin</artifactId>
         <!--插件的版本-->
        <version>3.8.1</version>
        <!--配置插件的信息-->    
        <configuration>
            <!--告诉maven,我们写的代码是在jdk1.8上编译的-->
            <source>1.8</source>
            <!--我们的程序应该运行在1.8的jdk上-->
            <target>1.8</target>
        </configuration>
        </plugin>
    </plugins>
</build>

在idea中配置maven

1.idea中内置了idea,但是一般不使用内置的mave,因为用内置的maven的设置不方便。所以使用自己安装的maven。

依赖

1.依赖范围,使用scope表示

scope的值有 compile,test,provided,默认是compile0

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

maven构建项目:清理,编译,测试,打包,安装,部署 过程(阶段)

 compiletestprovided
对主程序是否有效
对测试程序是否有效
是否参与打包
是否参与部署

maven常用属性

<properties>
   <!--maven构建项目使用的编码,避免中文乱码-->
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <!--编译代码使用的jdk版本-->
     <maven.compiler.source>1.7</maven.compiler.source>
   <!--运行程序使用的jdk版本-->
     <maven.compiler.target>1.7</maven.compiler.target>
</properties>

全局变量

在 Maven 的 pom.xml 文件中,<properties>用于定义全局变量,POM 中通过${property_name}的形式引用变量的值。

定义全局变量:

<properties>
<spring.version>4.3.10.RELEASE</spring.version>
</properties>

引用全局变量:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

指定资源位置

src/main/java 和 src/test/java 这两个目录中的所有*.java 文件会分别在 compile 和 test-compile 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes 目录中,但是这两个目录中的其他文件都会被忽略掉,如果需要把 src 目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。需要指定资源文件位置。以下内容放到<build>标签中。

<build>
   <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>
</build>



posted @ 2021-10-18 17:51  AMHAO  阅读(50)  评论(0编辑  收藏  举报