专栏首页Java全栈·全网最全、最新Maven构建工具核心知识,这篇文章包你这辈子也忘不掉Maven!!
原创

全网最全、最新Maven构建工具核心知识,这篇文章包你这辈子也忘不掉Maven!!

作者:Java学术趴 仓库:GithubGitee 博客:CSDN掘金InfoQ云+社区 公众号:Java学术趴 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权 版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 每日毒鸡汤:任何的限制,都是从自己的内心开始的。

大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小编亲自为大家整理的Maven构建工具的核心知识。大家喜欢的话可以收藏、转发、一件三连呦!!Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档项目管理工具软件。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

1.Maven介绍

  • Maven是一个项目构建工具(这就是个构建项目的辅助,不使用也可以)
  • 软件是一个工程(软件工程) :为了能够实现软件的流水线生产,在设计模式和构建软件时能够有一种规范和工程化的方法,人们便提出软件工程概念。

2. 完成一个Java项目,需要做哪些工作

  • 1.分析项目要做什么,知道项目有哪些组成部分。
  • 2.设计项目,通过哪些步骤,使用哪些技术。需要多少人, 多长的时间。
  • 3.组建团队,招人, 购置设备,服务器, 软件, 笔记本。
  • 4.开发人员写代码。 开发人员需要测试自己写代码。 重复多次的工作。
  • 5.测试人员,测试项目功能是否符合要求。 测试开发人员提交代码-如果测试有问题–需要开发人员修改–在提交代码给测试 测试人员在测试代码-如果还有问题-在交给开发人员-开发人员在提交-在测试 直到-测试代码通过。

3.传统开发项目的问题,没有使用Maven管理的项目

1)很多模块,模块之间有关系, 手工管理关系,比较繁琐。

2)需要很多第三方功能, 需要很多jar文件,需要手工从网络中获取各个jar

3)需要管理jar的版本, 你需要的是mysql.5.1.5.jar 拿你不能给给一个mysql.4.0.jar

4)管理jar文件之间的依赖, 你的项目要使用a.jar 需要使用b.jar里面的类。 必须首先获取到b.jar才可以, 然后才能使用a.jar.

a.jar需要b.jar这个关系叫做依赖,或者你的项目中要使用mysql的驱动,
也可以叫做项目依赖mysql驱动。 a.class使用b.class,a依赖b类

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

5.项目的构建

  • 在以上操作中,测试、编译、打包、部署都是属于构建的过程。
  • 构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。

5.1 maven支持的构建包括

  • 清理 : 把之前项目编译的东西删除掉,我新的编译代码做准备。
  • 编译 : 把程序源代码编译为执行代码, java-class文件 这个编译是批量的,maven可以同时把成千上百的文件编译为class。(可以一次将项目中的所有java文件编译为class) 这个编译和javac 不一样,javac一次编译一个文件。
  • 测试 : maven可以执行测试程序代码,验证你的功能是否正确。这个测试也是批量的,maven同时执行多个测试代码,同时测试很多功能(方法)。如果不使用Maven,一次只能测试一个功能(方法)。
  • 报告 : 生成测试结果的文件, 测试有没有通过。
  • 打包 : (测试成功后叫打包) 把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件, 通常的java程序,压缩文件扩展名是.jar 扩展的。对于web应用,这个压缩文件扩展名是.war
  • 安装 : 把打包中生成的文件jar,war安装到本机仓库
  • 部署 : 把程序安装好可以执行。

前六步使用Maven进行实现,最后一步部署由开发人员自己完成,使用Maven会复杂.

6.Maven核心概念

  • Maven能够实现自动化构建和他的内部原理分不开,这里我们从Maven的九个核心概念入手, 看看Maven是如何实现自动化构建的。

6.1 Maven的九个核心概念

  1. POM : 一个文件 名称是pom.xml , pom翻译过来叫做项目对象模型。 maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖。
  2. 约定的目录结构 : maven项目的目录和文件的位置都是规定的。
  3. 坐标 : 是一个唯一的字符串,用来表示资源的。
  4. 依赖管理 : 管理你的项目可以使用jar文件。
  5. 仓库管理 (了解) :你的资源存放的位置。
  6. 生命周期 (了解) : maven工具构建项目的过程,就是生命周期。
  7. 插件和目标 (了解) :执行maven构建的时候用的工具是插件。
  8. 继承 :maven中的继承其实就是继承pom.xml中的依赖,然后在子项目中就可以直接使用父项目中引用的jar和项目,作用和传递依赖一样,只是写法不同。类似于Java中的继承。
  9. 聚合:把子项目的构建过程串到一起。一个项目往往由多个模块构成的,在进行构建时,针对每个模块都进行构建命令是一件非常繁琐又容易出错的事情**,**所以Maven的聚合功能能够替我们完成进行一次构建命令完成全部模块的构建。把好几个项目合在一起。

讲maven的使用,先难后易的。 难是说使用maven的命令,完成maven使用 , 在idea中直接使用maven,代替命令。

7.Maven的安装与配置

  • 需要从maven的官网下载maven的安装包 apache-maven-3.3.9-bin.zip
  • 解压安装包,解压到一个目录,非中文目录。 解压文件介绍:
- bin目录放置maven的一些工具(里边的mvn.cmd,这是maven的一个命令,这个命令可以执行Maven的构建项目)。
- conf目录下有一个 settings.xml 文件,这个是Maven这个工具的配置文件。
- lib目录下存放的是jar包,Maven工具是由Java语言编写的。配置环境变量 : 在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录,bin之前的目录
M2_HOME=D:\work\maven_work\apache-maven-3.3.9   再把M2_HOME加入到path之中,在所有路径之前加入 %M2_HOME%\bin;验证,新的命令行中,执行mvn -v(这个命令代表测试这个Maven的版本号)

8.Maven核心----工程约定目录结构

  • 所谓约定就是已经规定好的,可以不按照这个约定做,但是一般情况下还是按照这个约定来。
  • 约定是大家都遵循的一个规则。
  • 每一个Maven项目在磁盘中都是一个文件夹。(这个文件夹就是这个项目)
假设其实有一个Hello项目 (#代表注释的意思)
Hello/
—/src
------/main          #放你主程序java代码和配置文件
----------/java      #你的程序包和包中的java文件
----------/resources #你的java程序中要使用的配置文件
------/test          #放测试程序代码和文件的(可以没有)
----------/java      #测试程序包和包中的java文件
----------/resources #测试java程序中要使用的配置文件
—/pom.xml 			 #maven的核心文件(maven项目必须有)
  • 此时Mavne就会自动的去main目录下找主程序,在test目录下找测试程序。Maven要做的工作都到 pom.xml文件中去找。
  • 在启动项目的时候,Maven首先去 pom.xml文件中找Maven要做的工作,然后去main和test文件夹下寻找工作的位置
  • PowerShell是cmd的超集,cmd能做的PowerShell都能做,但是PowerShell能做的cmd不一定全能做,PowerShell是cmd可以交互使用(在cmd的黑框里可以输入PowerSehll使用PowerShell,也可以在cmd黑框中输入cmd使用cmd)
  • 不论使用PowerShell还是cmd都可以使用 tree 目录名(文件名) 来获取到该目录下的目录结构
  • 这个获取到的是该目录下其他的目录结构(文件夹的结构),不包含其中的文件(比如:pom.xml)

8.1获取Maven中的jar包(在 Mave中这个jar包叫做插件)

  • 如何获取,按照以上的目录创建好一个文档,在根目录下使用mvn compile编译src/main目录下的所有java文件的。此时会获取到Maven所需的全部插件(也就是jar包)。
  • 注意 : 执行mvn compile这个命令必须咋与pom.xml同一级的目录下执行Java文件。
  • 下载这些jar包的位置:在apache中央仓库。 Maven在apache中央仓库的地址 Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter-2.0.9.pom
  • 为什么要下载 :maven工具执行的操作需要很多插件(java类–jar文件)完成的。如果没有这 些jar包的支持,Maven是无法完成操作的。
  • 下载的东西:jar包(在Maven中叫插件)是Maven完成某些功能必要的文件。
  • 下载的jar在哪里 : 默认仓库(本机仓库) C:\Users\YunboCheng(用户名).m2\repository
  • 下载的结果:mvn compile命令执行成功后,会在该项目的根路径(与src和pom.xml同级)下生成一个target目录(结果目录).
  • 在这个target目录下,存放的是我们书写的所有Java类的.class文件。

8.2 设置本机存放资源文件的目录位置(设置本机仓库)

  1. 修改maven的配置文件,maven配置文件的地址:maven安装目录/conf/settings.xml 先备份 setting.xml
  2. 修改 localRepository 指定你的要移动的目录**(不要使用中文)**
  3. 在这个 setting.xml 中找到这行代码(此时一下的代码在这个xml文件的注释中),这个地址为下载后将这些 jar包存储的默认位置。需要将以下这行代码从注释中取出来,并且改变其中的路径。 <localRepository>/path/to/local/repo</localRepository> <!--将这行从注释中取出来,并将路径改为自己设置的路径--> <localRepository>/path/to/local/repo</localRepository> <!--例如:想要改变的路径为:C:\development\Maven\Maven-jar--> <!--注意将\改为/ 保持一致--> <localRepository>C:/development/Maven/Maven-jar</localRepository>

8.3 Maven的使用方式

  • 独立使用Maven:使用maven的各种命令,完成代码的编译、测试、打包等。 比如:我们上边独立使用的Maven命令mvn compile独立完成对代码的编译。
  • 结合开发工具使用:一般可以在idea中使用Maven : 简单、快捷、不需要记住命令。
  • Maven核心----仓库的概念
  • 仓库是存放东西的,存放maven使用的jar包 和 我们项目使用的jar包
- maven使用的插件(各种jar)
- 我项目使用的jar(第三方的工具,比如:myql驱动、jackson)

9.1 仓库的分类

  • 本地仓库: 就是你的个人计算机上的文件夹,存放各种jar
  • 远程仓库: 在互联网上的,使用网络才能使用的仓库(远程仓库包括以下三种) ①中央仓库 :最权威的, 所有的开发人员都共享使用的一个集中的仓库 https://repo.maven.apache.org :中央仓库的地址。 ②中央仓库的镜像 :就是中央仓库的备份, 在各大洲,重要的城市都是镜像。 ③私服 :在公司内部,在局域网中使用的, 不是对外使用的。

9.2 仓库的使用

  • maven仓库的使用不需要人为参与
  • 开发人员使用仓库的顺序: 开发人员需要使用mysql驱动---->maven首先检查本地仓库---->私服---->镜像----->中央仓库
  • 开发人员使用远程仓库的顺序

从远程仓库下载的仓库一定会保存到本地仓库一份

10.Maven核心----pom文件

  • pom即(Project Object Model)项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以便进行构建和描述,pom.xml是Maven的灵魂。所有,Maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。
  • pom.xml初始:以下这些参数都是pom.xml文件中的标签属性

以上这些Maven核心参数都要卸载pom.xml文件中。

11.Maven核心----坐标

  • 每一个Maven项目必须有坐标,即项目的唯一标识。
  • groupId + artifactId + version 三个信息组成的代表一个坐标
  • 这个坐标在唯一值,在互联网中唯一的标识一个项目。

11.1 中央仓库

  • https://mvnrepository.com/ (mvn中央仓库的地址)
  • 在这个中央仓库中你可以下载所需饿一切jar包,需要什么在网页中搜索即可。 例如 :所搜mysql会找出有关mysql数据库的信息,连接驱动等.....
  • 以上是搜索mysql之后显示的信息,包括了MySQL Connector/J » 8.0.26 所属的公司名称、这个版本的原始下载地址、提供了pom版本文件的下载与jar包形式的下载机制、最重要的是提供了这个版本的数据库的唯一标识(即定位)在下边的那个Maven框框。这个坐标有MySQL的公司(即甲骨文公司提供)
  • 使用这个中央仓库最主要的就是去这个仓库中寻找这个 pom.xml文件中的这个Maven依赖代码,将这个依赖代码复制到我们的pom.xml文件中,Mavne会自动下载这个所需的jar包,并且会在自定义的本地(或者默认的本机仓库存储一份)

12.Maven核心----依赖管理

  • packaging : 打包后压缩文件的扩展名,默认是jar,web应用是war。
  • packaging可以不写,因为默认就是jar pom.xml加入依赖的方式::
  • 经过以上代码Maven会去本地仓库查有没有5.1.9这个版本的mysql-conncetor的jar包,如果在本地仓库中存在5.1.9这个版本的mysql-conncetor, 此时就会把这个版本的数据库绑定到这个Maven项目上。以上的mysql、mysql-conncetor、5.1.9对应的都是在本地仓库中存在的文件夹
  • 以上的依赖文件如果在本地仓库中没有,那么Maven会自动去远程仓库中进行寻找。
开发人员需要使用mysql驱动---->maven首先检查本地仓库---->私服---->镜像----->中央仓库

13.Maven核心----配置属性

14.Maven核心----构建

  • Maven在进行项目的构建时, 配置信息,例如指定编译java代码使用的jdk的版本等

15. Maven核心----生命周期、常用命令、插件

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

以下是一个标准的工程约定目录结构

以下是Maven的常用命令

15.1 mvn clean (清理)命令

  • 以上就是一个插件,在生命周期中的清理阶段,使用Maven命令中的mvn clean清理命令,mvn clean之后会使用以上这个插件(jar包)完成清理工作。
  • 注意:清理工作是插件完成的,不是命令完成的,命令只是负责调用这些插件(jar包),插件来完成清理,编译,测试,报告,打包,安装,部署这些工作。
  • mvn clean:只编译主程序下的Java文件(即mian目录下的所有Java文件,不编译test文件夹下 的测试程序)

15.2 mvn compile (编译主程序)命令

  • 以下这个是使用 mvn compile 命令编译主程序,所使用的插件
  • 使用 mvn compile命令,会使用两个插件,完成两个操作 编译main/java/目录下的所有java 为class文件,将这些class文件存储到target/classes文件夹下。
  • 编译main/java/目录下的所有java文件,将这些class文件存储到target/classes文件夹下。
  • 这个插件会将src/main/resources文件夹中的文件拷贝到 target/classes的文件夹下

15.3 mvn test-compile (编译测试程序)命令

  • mvn test-compile :这个命令编译test文件夹下所有的测试程序,编译好的这些测试程序会存储到target/test-classes文件夹下。

15.4 mvn test (测试程序)命令

  • 重点 : 测试程序的包路径一定要和主程序的包路径一致,这样才不会报错,也就是保证这两 个文件在同一个包路径下。
  • 此时可以看出test中的测试程序 与main中的主程序的路径是一样的。
  • 这个是执行的test/java文件夹下的测试程序,会将测试结果全部存储到target/surefire-resports文件夹中。
  • 注意 :在执行mvn test 命令时,会把测试以前的步骤重新进行一次(清理、编译主程序、编译测试程序),这是因为有 Maven生命周期的存在。所以此时需要的插件比较多。第一个编译的是main主程序,第二个编译的是test测试程序。
  • 以上的这个插件是用来测试程序的。以下输出格式代表测试成功。
  • 从 TESETS 以下代表的是测试结果 :
    • Runing代表的是执行的测试程序的路径以及测试程序的名称。
    • Maven junit testAdd代表的是该测试结果输出的信息。
    • Test run : 代表的是测试程序运行时的信息。(测试数量、失败、错误、跳过、测试时间)
    • Results : 代表的是这个测试程序输出的结果。(测试数量、失败、错误、跳过)
  • 以下代码测试失败。此时会抛出异常,并显示测试两个,失败一个。

以下代码是测试结果:测试两个,失败了一个,会告诉你错误信息

Failed tests:testAdd2(com.yunbocheng.TestHelloMaven): expected:<5> but was:<3>

重点 :以上的错误信息会生成一个报告,这个报告在 target/surefire-reports文件夹下。测试的所有结果都在这个文件夹下。

讲以上的代码错修改完成,此时会显示以下运行结果。测试两个方法,且都成功。

15.5 mvn package命令(打包主程序)

  • mvn package 命令,按照pom.xml配置文件把主程序打包为jar包或者war包。
  • 以下是打包使用的插件,在执行这插件之前,也会使用编译、测试的插件将这个项目在执行一遍,最后由mvn package这个命令将主程序进行打包。
  • jar包以及war包就相当于一个压缩文件。
  • 打包传成功之后会在target目录下生成一个ch01-maven-1.0-SNAPSHOT.jar包。
  • 这个jar包中信息的解释:(jar包中包含主成程序的类文件以及配置文件(pom.xml))
- Hello这个项目主程序(HelloMaven)的路径以及字节码文件。
- 里边存在一个META-INF文件夹,在文件夹下包含这个项目的pom.xml配置文件。
- 里边还有原Maven项目src/mian/resources文件夹里边的文件(config.txt配置文件)这个配置文件是开发人员自己在mian目录下创建并书写的。针对这个jar包名称的解释:
- ch01-maven : 就是该项目pom.xml配置文件中artifactId(项目模块名称参数的信息。
- 1.0-SNAPSHOT : 就是该项目pom.xml配置文件中version(版本号)参数的信息。

重点 :这个jar包含所有的东西就是原Maven项目中main目录下的所有主程序的class文件以及开发人员自己编写的配置文件。

15.6 mvn install命令(安装主程序)

  • 会把本工程打包,并且按照本工程的坐标保存到本地仓库。即使把这个项目生成的jar包保存到你自定义的本机仓库或者默认仓库(.m2)中,这样其他的项目就可以使用你这个项目中的主程序方法了
  • 以下是执行mvn install命令所使用的插件,在执行这个插件之前,也会使用编译、测试、打包的插件将这个项目在执行一遍,最后由mvn package这个命令将这个Maven项目生成的jar包保存到本机仓库
  • 这个本机仓库的地址就是自己在Maven中自己配置的地址或者是默认地址(.m2)。
  • 保存到本机仓库里的地址就是这个Maven项目中pom.xml配置文件中的坐标信息。
<groupId>com.yunbocheng</groupId>
<artifactId>ch01-maven</artifactId>
<version>1.0-SNAPSHOT</version>

以上是该Maven项目中pom.xml配置文件中的坐标信息。以下是保存到本机仓库中的路径信息

C:\development\Maven\Maven-jar\com\yunbocheng\ch01-maven\1.0-SNAPSHOT\ch01-maven-1.0-SNAPSHOT.jar  

可以看出坐标信息就是保存到本机仓库的路径信息

注意 : 在groupId这个参数中的信息,每一个小数点就代表一级文件夹

com.yunbocheng代表com/yunbocheng。

16.单元测试 junit

  • 单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。
  • junit测试的内容: 测试的是类中的方法, 每一个方法都是独立测试的。 方法是测试的基本单位(单元)。
  • maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。

测试程序格式

17.关于 Maven项目中 pom.xml配置文件的解释

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apche.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">

<modelVersion>4.0.0</modelVersion>

<groupId>com.yunbocheng</groupId>
<artifactId>ch01-maven</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
</dependencies>
</project>
  • modelVersion : 是这个Maven的版本号,现在统一使用4.0.0这个版本
  <!--这段代码表示的是该项目生成后的jar包在本机仓库中的保存路径-->
  <groupId>com.yunbocheng</groupId>
  <artifactId>ch01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
 <!--这段代码代表的是从外部引入进来的依赖jar包,Maven会自动寻找这个jar包,如果这个jar包在本机中存在直接拿来使用,如果不存在会自动去远程仓库中获取,并且获取到的远成jar包会在本机仓库保存一份,方便下次使用。-->
 <dependencies>
 	<dependency>
 		<groupId>junit</groupId>
 		<artifactId>junit</artifactId>
 		<version>4.12</version>
 		<scope>test</scope>
 	</dependency>
 </dependencies>
 <!--<dependencies>代表的是里边有多个插件(jar包),相当于多个插件的一个大括号,所有的插件都写在这个dependencies标签中-->
 <!--<dependency>这个标签里包含的是这个项目中的一个插件,他写在<dependencies>这个标签的里边,会有多个<dependency>标签,每一个标签就是一个插件-->

18.编译插件配置

  • 插件可以在自己的项目中设置,最常用的是 maven 编译插件。设置项目使用的jdk版本时通过编译插件来指定。使用pom.xml配置文件中的< build >标签中设置。
  • build是用来构建配置项目的。
  • 控制配置 Maven构建项目的参数设置,如 :设置JDK的版本。
  • 参数信息解释:
    • build :构建项目参数信息。
    • plugins : 配置插件,这个相当于所有插件的一个大括号,所有的插件都写在这个里面。
    • plugin : 配置具体的插件,这个代表该Maven项目中的一个插件信息,还有其他的插件。
    • groupId :该插件的组织名称。
    • artifactId : 插件的名称。
    • version : 插件的版本。
    • confiruration : 配置插件的信息。
    • source : 告诉Maven,我们写的代码是在jdk1.8上编译的。
    • target : 我们的程序应该运行在1.8的jdk上。

18.1 配置 jdk版本的两种方式

  • 第一种:使用 properties标签配置
  • 第二种:使用 configuration 标签配置

19. idea中设置Maven

  • 在idea中设置maven ,让idea和maven结合使用。
  • idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。
  • 使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息
  • 在idea的文件中 Setting是设置当前项目的,Other Settings是为以后新建工程起作用
  • 在配置Maven的时候,这两个位置都要配置。

19.1配置Setting中的Maven

  • 第一步:配置Maven

需要配置的三个地方

  • Maven Home directory : maven的安装目录。
  • User Settings File : 就是maven安装目录conf/setting.xml配置文件 。
  • Local Repository : 本机仓库的目录位置。
  • 第二步:配置运行程序
  • 配置JDK的版本
  • 设置一个参数信息,-DarchetypeCatalog=internal,这个参数信息的目的是为了使构建Maven项目时速度变快。
  • Maven在创建项目的时候会默认连网下载一个模板文件,这个模板文件大小有7M,为了避免 不下载这个模板文件,加上这个参数信息,表示我们用的是内部的内容,不用下载。
  • -DarchetypeCatalog=internal , maven项目创建时,会联网下载模版文件,比较大,使用 -DarchetypeCatalog=internal,不用下载, 创建maven项目速度快。(2019版本以后,新的就不用添加这个)

19.2 配置Other Settings

  • 第一步 :找到文件下拉菜单中的 新项目管理
  • 第二步 :找到新项目设置
  • 第三步 : 找到Maven 和上边的配置方式一样
  • 第四步 :添加jdk与参数信息

20.idea创建JavaSE项目

使用模版创建项目

  • maven-archetype-quickstart : 普通的java项目
  • maven-archetype-webapp : web工程

以下是使用maven-archetype-quickstart 模块构建成功后的结构目录

注意:其中 resources文件 是我们自己手动创建的,maven-archetype-quickstart模块没有提供这两个文件夹。其中APP类是模块自动生成的,如果想用别的类文件,直接把这份删除即可。

在idea中,不同的文件夹展示的形式不一样

  • 源根 : 代表Java主程序的根文件夹。
  • 测试源根 : 代表Java测试程序的根文件夹。
  • 资源根 :代表main文件夹下的配置文件。
  • 测试资源根 :代表test文件夹下的配置文件。

以下目录结构中包含了项目执行之后生成的target文件夹。

以下是一个Maven构建的Java项目执行完程序之后结构,Java项目生成的是jar包

21.idea创建Web项目

使用模版创建项目

  • maven-archetype-quickstart : 普通的java项目
  • maven-archetype-webapp : web工程

以下就是使用maven-archetype-webapp模块设置的web工程目录

此时需手动在main文件夹下创建一个Java目录(源根),还需一个存放主程序配置文件夹(资源根)

还需要在src下创建一个与main文件夹同级的测试文件夹(test),在test文件夹下创建一个测试文件夹(测试源根),还有一个测试文件夹下的配置文件夹(测试资源根)

以下就是一个完整的Web Maven项目结构

在Maven中不用从导入外部servlet (jar包)与 jsp(jar包),只需要在pom.xml中加入servlet与jsp依赖即可

注意:以下这些依赖项不需要手动编写,直接去中央仓库中下载这个pom.xml源代码。

中央仓库地址 :中央仓库

<dependencies> 
  <!--这些依赖项全部写在dependencies标签内部-->  
	<!--添加servlet依赖项(servlet的jar包)-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!--添加jsp依赖项(jsp的jar包)-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
</dependencies>

以下是一个Maven构建的Web项目执行完程序之后结构,Java项目生成的是war包

这个war包就是最终交付给客服的web文件,这个war包解压后可以直接使用

  • 此时将这个war包放到 Tomcat/webapps下,之后启动Tomcat/bin/startup.bat,启动之后在网页上就可以直接运行这个war包中的文件。

22. idae中导入Maven工程(模块)

22.1 解决依赖不能识别的问题:

  • 第一种 :将鼠标停留在pom.xml文件上,右键选中Maven,之后点击重新加载项目。
  • 注意 :此时刷新的只是这一个项目的依赖文件。
  • 第二种:在Maven栏中点击刷新按钮
  • 注意 : 此时刷新的是整个在Maven栏中存在的项目

22.2 idea导入Maven模块

  • 第一步 :找到项目结构,找到模块,然后点击加号,导入模块。
  • 第二步 : 在你的资源管理器中找到你要导入的Maven模块。
  • 第三步 : 选中从外部模型导入模块,选择Maven,点击确定。
  • 第四步 :将缺少的依赖进行勾选。idea会自定为我们选择的。

23.依赖管理

  • 依赖范围, 在pom.xml配置文件中使用scope标签表示的。
  • scope:表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用。
  • maven构建项目 编译, 测试 ,打包, 安装 ,部署 过程(阶段)
  • scope的值有 : compile, test, provided ,默认是compile
  • compile : 在编译, 测试 ,打包, 安装 ,部署 这些阶段都要用到这个依赖的jar包。
  • test :只在测试程序阶段使用这个依赖jar包,
  • provided(提供者) : 在编写主程序和运行程序阶段使用这个依赖jar包。
  • 重点 : 使用compile ,该项目打包之后,会在生成的war包或者jar包中存在被compile声明的依赖项(即jar包), 使用provided,该项目打包之后,生成的jar包或者war包中不存在被peovided声明的依赖项(jar包)。
  • 在pom.xm文件中添加依赖jar包的时候,如果本机仓库没有,Maven会自动到中央仓库进行下载,不用开发人员自己解决,并且加入依赖项的代码(坐标)可以去中央仓库进行复制粘贴。

24.Maven常用操作

24.1 Maven属性设置

  • 这个属性设置是Maven提供的。
<!--在 properties标签中声明的就是Maven属性的设置 -->
<!--maven.compiler.source 这是属性名,1.8这是属性值-->
<properties>
    <!--maven构建项目使用的编码方式,避免中文乱码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--编译代码使用饿jdk版本-->
    <maven.compiler.source>1.8</maven.compiler.source>
    <!--运行程序时使用的jdk版本-->
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

24.2 Maven全局变量

  • 这个属性是开发人员自定义的。
  • 自定义的属性 :
- 在 properties标签中 通过自定义标签声明变量(标签名就是变量名)。
- 在pom.xml文件中的其它位置,使用 ${标签名} 使用变量的值。自定义全局变量一般是定义依赖的版本号, 当你的项目中要使用多个相同的版本号, 先使用全局变量定义, 在使用${变量名}
<!--在 properties 标签中声明自定义的全局变量-->
<properties>
    <!--maven构建项目使用的编码方式,避免中文乱码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--编译代码使用饿jdk版本-->
    <maven.compiler.source>1.8</maven.compiler.source>
    <!--运行程序时使用的jdk版本-->
    <maven.compiler.target>1.8</maven.compiler.target>
    <!--自定义变量(这个变量名就是标签名),表示版本号-->
    <!--这个标签名可以自己定义,因为在XML文件中标签名随意定义,没有要求。-->
    <spring.version>5.2.0</spring.version>
</properties>
  • 之后在其他地方使用这个版本号的时候就不用挨个的书写版本号,直接使用这个变量。
  • 这样的话只要在properties 中修改这个版本号,修改一次,在其他的依赖中这个版本号都会更改。

24.3 资源插件

  • 在pom.xml的 build标签中加入resources标签
<build>
    <!--只要将这个resources标签中放到buil标签中就可以,可以是任意的位置-->
	<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>
<!--以上代码代表的含义:将src/main/java目录下得所有.properties和.xml文件-->

例如 :mybatis课程中会用到这个作用。

  • 默认没有使用resources的时候, maven执行编译代码时, 会把src/main/resource目录中的文件拷贝到target/classes目录中。对于src/main/java 目录下的非Java文件不处理,不会拷贝到target/classes目录中。
  • 我们程序有时需要把一些文件放在src/main/java 目录中,当我们在执行Java程序时,需要用到 src/main/java 目录中的文件,需要告诉Maven在 使用命令mvn compile 编译src/main/java目录下的程序的时候,需要把Java文件夹中的非Java文件一同拷贝到target/classes目录中

以上项目的源代码,点击星球进行免费获取 星球(Github地址)如果没有Github的小伙伴儿。可以关注本人微信公众号:Java学术趴,发送Maven,免费给发给大家项目源码,代码是经过小编亲自测试的,绝对可靠。免费拿去使用。

--------看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!---------

点击星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦!!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring+SpringMVC+Mybatis整合开发思路及配置详解(二)

    本文承接上一篇文章《Spring+SpringMVC+Mybatis整合开发思路及配置详解(一)》,上一篇文章我们回顾了SSM的相关知识,讲述了一个SSM项目的...

    roobtyan
  • 五分钟学Java:如何才能学好Java Web里这么多的技术

    本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者...

    黄小斜学Java
  • 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博...

    Java技术江湖
  • Maven学习笔记(一)

    本教程作者是「小灯光环」,作者简介:全栈开发工程师,CSDN博客专家,CSDN论坛 Java Web/Java EE版主,热爱技术,乐于分享,在分布式Web开发...

    用户1093975
  • 结合提供者模式解析Jenkins源码国际化的实现

    关键字:提供者模式,设计模式,github,gerrit,源码学习,jenkins,国际化,maven高级,maven插件 本篇文章的源码展示部分由于长...

    文彬
  • 自动化构建工具Maven

    如今我们构建一个项目需要用到很多第三方的类库,一个项目jar包的数量之多往往让我们无法想象,并且jar包之间的关系错综复杂,一个jar包往往又会引用其他jar包...

    wangweijun
  • IntelliJ IDEA 2019从入门到癫狂 图文教程!

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。

    Java学习录
  • IntelliJ IDEA 2019从入门到上瘾 图文教程

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。

    用户1516716
  • IntelliJ IDEA 真香教程

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。

    一个优秀的废人
  • IntelliJ IDEA使用教程(2018图文版)

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着...

    Java团长
  • IntelliJ IDEA 从入门到上瘾教程,2019图文版!

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。

    Java团长
  • IntelliJ IDEA 新手使用教程,2019图文版!

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。

    用户5224393
  • IntelliJ IDEA 2019 从入门到癫狂 图文教程

    在当今互联网中从业者众多,不断崛起的互联网公司也有很多,但如BAT等大厂,仍然是很多同学想要进入的企业。对于程序员来说,他们同样也想在国内顶尖的互联网公司获得一...

    江南一点雨
  • Apache Maven 入门篇

    写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法。 这个入门篇分上下两篇。本文着重...

    MonroeCode
  • OpenDaylight开发学习十问十答

    编者说 OpenDaylight自面世起,“坑”就一直伴随着它的成长而成长,无论是起初的“不稳定”门,还是长期“言简意不赅”的文档,似乎对于想一探究竟的小伙伴总...

    SDNLAB
  • IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着...

    好好学java
  • IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着...

    Rookie
  • IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾

    如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着...

    java思维导图

作者介绍

精选专题

活动推荐

扫码关注云+社区

领取腾讯云代金券