作者:Java学术趴 仓库:Github、Gitee 博客:CSDN、掘金、InfoQ、云+社区 公众号:Java学术趴 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权 版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 每日毒鸡汤:任何的限制,都是从自己的内心开始的。
大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小编亲自为大家整理的Maven构建工具的核心知识。大家喜欢的话可以收藏、转发、一件三连呦!!Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 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类
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进行实现,最后一步部署由开发人员自己完成,使用Maven会复杂.
讲maven的使用,先难后易的。 难是说使用maven的命令,完成maven使用 , 在idea中直接使用maven,代替命令。
- 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的版本号)
假设其实有一个Hello项目 (#代表注释的意思)
Hello/
—/src
------/main #放你主程序java代码和配置文件
----------/java #你的程序包和包中的java文件
----------/resources #你的java程序中要使用的配置文件
------/test #放测试程序代码和文件的(可以没有)
----------/java #测试程序包和包中的java文件
----------/resources #测试java程序中要使用的配置文件
—/pom.xml #maven的核心文件(maven项目必须有)
- maven使用的插件(各种jar)
- 我项目使用的jar(第三方的工具,比如:myql驱动、jackson)
从远程仓库下载的仓库一定会保存到本地仓库一份
以上这些Maven核心参数都要卸载pom.xml文件中。
开发人员需要使用mysql驱动---->maven首先检查本地仓库---->私服---->镜像----->中央仓库
以下是一个标准的工程约定目录结构
以下是Maven的常用命令
以下代码是测试结果:测试两个,失败了一个,会告诉你错误信息。
Failed tests:testAdd2(com.yunbocheng.TestHelloMaven): expected:<5> but was:<3>
重点 :以上的错误信息会生成一个报告,这个报告在 target/surefire-reports文件夹下。测试的所有结果都在这个文件夹下。
讲以上的代码错修改完成,此时会显示以下运行结果。测试两个方法,且都成功。
- Hello这个项目主程序(HelloMaven)的路径以及字节码文件。
- 里边存在一个META-INF文件夹,在文件夹下包含这个项目的pom.xml配置文件。
- 里边还有原Maven项目src/mian/resources文件夹里边的文件(config.txt配置文件)这个配置文件是开发人员自己在mian目录下创建并书写的。
- ch01-maven : 就是该项目pom.xml配置文件中artifactId(项目模块名称参数的信息。
- 1.0-SNAPSHOT : 就是该项目pom.xml配置文件中version(版本号)参数的信息。
重点 :这个jar包含所有的东西就是原Maven项目中main目录下的所有主程序的class文件以及开发人员自己编写的配置文件。
<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。
测试程序格式
<?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>
<!--这段代码表示的是该项目生成后的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>标签,每一个标签就是一个插件-->
需要配置的三个地方
使用模版创建项目
以下是使用maven-archetype-quickstart 模块构建成功后的结构目录
注意:其中 resources文件 是我们自己手动创建的,maven-archetype-quickstart模块没有提供这两个文件夹。其中APP类是模块自动生成的,如果想用别的类文件,直接把这份删除即可。
在idea中,不同的文件夹展示的形式不一样
以下目录结构中包含了项目执行之后生成的target文件夹。
以下是一个Maven构建的Java项目执行完程序之后结构,Java项目生成的是jar包
使用模版创建项目
以下就是使用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包解压后可以直接使用
<!--在 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>
- 在 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>
<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课程中会用到这个作用。
以上项目的源代码,点击星球进行免费获取 星球(Github地址)如果没有Github的小伙伴儿。可以关注本人微信公众号:Java学术趴,发送Maven,免费给发给大家项目源码,代码是经过小编亲自测试的,绝对可靠。免费拿去使用。
--------看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!---------
点击星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。