Maven笔记

Maven

Maven简介:

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. 帮你部署项目

maven构建包括:

  1. 清理:把之前项目编译的文件删除,为新的编译代码做准备

  2. 编译: 批量的将程序源代码编译为执行代码

  3. 测试: maven可以执行测试程序代码,验证你的功能是否正确

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

  5. 打包: 把你项目中所有的class文件,配置文件等所有资源放在一个压缩文件中。

    ​ Java程序, 压缩文件是 jar 扩展名

    ​ Web 应用,压缩文件是 war 扩展名

  6. 安装: 把生成的jar、war文件安装到本地仓库中

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

maven 核心概念:

Maven能够实现自动化构建和它的内部原理有很大关系,我们从Maven的九个核心概念入手,了解Maven是如何实现自动化构建的

① POM

​ 一个文件名称是 pom.xml, pom 翻译过来是项目对象模型。

② 约定的目录结构

​ maven项目的目录和文件的位置都是规定的。

③ 坐标

​ 唯一的字符串,用来表示资源。

④ 依赖管理

​ 管理你的项目可以使用的jar文件。

⑤ 仓库管理

​ 你的资源存放位置。

⑥ 生命周期

​ maven工具构建项目的过程。

⑦ 插件和目标

​ 执行maven构建的时候使用的工具。

⑧ 继承

⑨ 聚合

maven工具的安装和部署:

  1. maven官网下载maven安装包:推荐使用 3.3.9 版本。<apache-maven-3.3.9-bin.zip>

  2. 解压到一个非中文目录中。

  3. 配置环境变量:

    指定一个M2_HOME的名称,指定其值为maven根目录的路径

    M2_HOME = E:\Maven\apache-maven-3.3.9 (我的解压在了E盘的Maven文件夹中)

    再把M2_HOME放到path路径中

    ;%M2_HOME%\bin (都学到这里分号就别再弄错啦)

    或者 ;E:\Maven\apache-maven-3.3.9\bin

  4. 验证: cmd --> mvn -v

    注意: 出现Error:JAVA_HOME not found in your environment.

    ​ 表示你没有配置JDK,即没有用JAVA_HOME指定你的jdk路径。

    出现 Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)

    表示安装成功了。

Maven的核心概念:

maven约定的目录结构:

每一个maven项目在磁盘中都是一个文件夹

Hello/(根目录、工程名)

​ ----/src (源代码)

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

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

​ ----|----|------/resources #java程序中要使用的配置文件

​ ----|----/test #放测试程序代码和文件

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

​ ----|----|------/resources #测试java程序中要使用的配置文件

​ —/pom.xml #maven的核心文件

仓库:

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

Maven的插件,插件也是一些jar, 这些jar 可以完成一定的功能

我们自己开发项目的模板

第三方框架或工具的jar 包

仓库的分类:

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

远程仓库:(需要网络才能使用)

​ ① 中央仓库,最权威的,所有开发人员都共享使用的一个集成仓库。

​ https://repo.maven.apache.org

​ ② 中央仓库的镜像: 相当于中央仓库的备份,在各个州的重要城市。

​ ③ 私服: 公司内部,不对外使用

仓库的使用:

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

​ 开发人员需要的驱动 ----> maven首先查本地仓库 ----> 私服 ----> 镜像 ----> 中央仓库

pom:

​ 即Project Object Model 项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml 文件中进行申明,以方便进行构建和描述,pom.xml 是Maven 的灵魂。

基本信息
modelVersion Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0
groupId组织 id,一般是公司域名的倒写。groupId、artifactId、version 三个元素生成了一个Maven 项目的基本坐标,在众多的 maven 项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称。
artifactId项目名称,也是模块名称,对应groupId 中项目中的子项目。
version项目的版本号。
如果项目还在开发中,是不稳定的版本,通常在版本后带-SNAPSHOT
version使 用三位数字标识,例如1.1.0
packaging项目打包的类型,可以使用jar、war、rar、ear、pom,默认是 jar
依赖
dependencies和dependencyMaven 的一个重要作用就是管理jar 包,为了一个项目可以构建或运行,项目中不可避免的会 依赖很多其他的jar 包,在Maven 中,这些jar 就被称为依赖,使用标签dependency 来配置。
配置属性
propertiesproperties用来定义一些配置属性.例如project.build.sourceEncoding.可以设置为 UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
构建
buildbuild 表示与构建相关的配置,例如设置编译插件的 jdk 版本
继承
parent在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的 依赖、或者相同的组件配置等,也有类似 Java 的继承机制,用 parent 声明要继承的父工程的 pom 配置。
聚合
modules在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块, 该模块打包方式为 pom,并且在其中使用 modules 聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所 有模块,叫 Maven 的聚合。

坐标:

​ Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一个 Maven 项目。

​ groupId、artifactId 和 version 决定项目在仓库中 的路径,artifactId 和 version 决定 jar 包的名称。

​ 公司域名倒写

​ 自定义项目名称

​ 自定义版本号

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

依赖:

​ dependencies 和 dependency,

​ 一个 Maven 项目正常运行需要其它项目的支持,Maven 会根据坐标自动到本地仓库中进行查找。 对于程序员自己的 Maven 项目需要进行安装,才能保存到仓库中。

​ 相当于以前导入jar包。

maven 生命周期:

​ 就是maven构建项目的过程:清理、编译、测试、报告、打包、安装、部署

maven常用命令:

注意:执行以下命令必须在命令行进入 pom.xml 所在目录!

命令作用
mvn clean清理(会删除原来编译和测试的目录,即target 目录,但是已经install 到仓库里的包不会删除)
mvn compile编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
mvn test-compile编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
mvn test测试(会生成一个目录surefire-reports,保存测试结果)
mvn package打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
mvn install安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)

插件:

​ clean 插件 maven-clean-plugin:2.5

​ resources 插件 maven-resources-plugin:2.6

​ compile 插件 maven-compiler-plugin

​ package 打包插件 maven-jar-plugin

​ deploy 发布插件 maven-install-plugin

<build>
     <plugins>
         <plugin>
             <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>
             </configuration>
         </plugin>
     </plugins>
</build>

单元测试(测试方法):

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

​ junit测试的是类中的方法,每一个方法都是独立测试的。 方法时测试的基本单位。

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

步骤:

  1. 加入依赖
  2. 在maven项目中的sec/test/java目录下,创建测试程序。
    1. 测试类的名称: Test + 要测试的类名
    2. 测试的方法名称: Test + 方法名称
      1. 方法是public的
      2. 方法没有返回值
      3. 名称可以自定义,但推荐使用以上的
      4. 在方法的上面加入 @Test

依赖管理

compile(默认)testprovided
对主程序是否生效
对测试程序是否生效
是否参与打包
是否参与部署

maven常用设置

maven系统变量:

​ <maven.compiler.source>1.8<maven.compiler.source> 源码编译 jdk 版本

​ <maven.compiler.target>1.8<maven.compiler.target> 运行代码的 jdk 版本

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

​ <project.reporting.outputEncoding>UTF-8<project.reporting.outputEncoding> 生成报告的编码

全局变量

在pom.xml文件中,用于定义全局变量,通过 ${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 文件会分别在 comile 和 test-comiple 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes 目录中。但是这两个目录中的其他文件都会被忽略掉,如果需要把 src 目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。需要指定资源文件位置。以下内容放到标签中。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值