Java基础之初识Maven
一、为什么使用Maven?
- 首先我们先灵魂拷问一下jar包是什么?我们可以将它理解为我们写的一个Java程序,整个Java程序中由多个Java文件和依赖组成。了解清楚这个之后,接下来介绍我们为什么要使用Maven
- 很多小伙伴学习完Maven之后还是有个疑问,它是干什么用的?所以进入今天的内容前,我先按照自己的理解说明一下Maven
- Maven相当于一个仓库管理员,它有本地仓库和云端仓库两个仓库与,它在本地仓库中管理着我们创建的jar包,同样的,我们可以通过远程仓库来使用别人的jar包,当然了,它有属于自己的一套规范,只有这样,才可以让我们通过Maven来使用别人的包
二、使用Maven的好处
既然Maven是管理jar包的,当然了,有关jar包的一些问题它都可以解决,比如下面的问题:
jar包之间的依赖关系
- 前面说了jar包相当于一个Java程序,因此jar包往往不是孤立存在,它也需要别的jar包支持才能正常工作,这就需要了解清楚jar包的依赖关系,Maven就提供了这个功能,帮助我们了解清楚依赖关系从而减少未来开发中可能会遇到的一些问题
jar包之间的冲突问题
- 既然需要调用别的jar包才能工作,当jar包之间都使用了另一个jar包的不同版本的时候,就会造成jar包冲突,别怕,Maven也可以解决这个问题
获取第三方的jar包
- 我们在做项目时,需要调用一个三方的jar包,如果去这个jar包的网站上下载岂不是太麻烦了,使用Maven可以直接从中央仓库下载,然后就可以很方便的调用这个jar包了
将项目拆分为多个工程模块
- 在项目开发中,如果所有功能都使用一个工程模块,那么需要修改某个功能就很麻烦,我们就需要将整个项目按照功能进行模块拆分,但是当拆分后怎么相互调用和访问呢?使用Maven可以清晰地了解项目拆分的情况
实现项目的部署
- 在实际生产环境中,项目规模增加到一定程度后,可能每个模块都需要运行在独立的服务器上,我们称之为分布式部署,这里就需要用到Maven来完成项目的部署
三、Maven是什么?
介绍完Maven的好处之后,我们正式开始学习Maven
Maven是自动化构建工具,构建是什么呢?,以Web项目举例
- 我们可以将未编译的Web工程比喻为一只生的鸡,编译好的Web工程是一只煮熟的鸡,编译部署的过程就是将鸡炖熟
- 在实际项目中整合第三方框架,Web工程中除了Java程序和JSP页面、图片等静态资源之外,还包括第三方框架的jar包以及各种各样的配置文件。所有这些资源都必须按照正确的目录结构部署到服务器上,项目才可以运行
- 构建就是以我们编写的Java代码、框架配置文件、国际化等其他资源文件、JSP页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程
接下来介绍一下构建的环节
1. 清理:删除以前的编译结果,为重新编译做好准备。
2.编译:将Java源程序编译为字节码文件。
3.测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
4.报告:在每一次测试后以标准的格式记录和展示测试结果。
5.打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。
6.安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
7.部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。
我们要构建一个jar包,就需要手动完成上面的步骤,使用Maven就可以自动的完成上述步骤,Maven之所以能够实现自动化的构建,和它的设计是紧密相关的。我们对Maven的学习就围绕它的九个核心概念展开
1.POM
2.约定的目录结构
3.坐标
4.依赖管理
5.仓库管理
6.生命周期
7.插件和目标
8.继承
9.聚合
四、安装Maven
第一步:我们需要下面两个包,第一个的maven-bin.zpi这个,src是源码,我们用不到,第二个是repo,它里面包含了一些常用的依赖包
第二步:我们将这两个包放到一个文件夹中并解压缩一下
第三步,配置环境变量
我的电脑–>右键–>属性–>高级系统设置–>环境变量,然后跟前面配置Java一样,我们先新建一个HOME
第四步,添加path
第五步,测试一下是否成功:输入命令: mvn -version
五、第一个Maven
我们先手动创建一下工程,感受一下,然后我再介绍怎么使用IDEA创建Maven工程
第一步:创建约定的目录结构
Hello src ——main ————java ————resources ——test ————java ————resources pom.xml /* main目录用于存放主程序。 test目录用于存放测试程序。 java目录用于存放源代码文件。 resources目录用于存放配置文件和资源文件 */
第二步:创建Maven的核心配置文件pom.xml,先直接复制就好
<?xml version="1.0" ?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.company.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hello</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> </project>
第三步:编写主代码,在src/main/java/com/company/maven
目录下新建文件Hello.java
package com.company.maven; public class Hello { public String sayHello(String name){ return "Hello "+name+"!"; } }
第四步:编写测试代码,在/src/test/java/com/company/maven
目录下新建测试文件HelloTest.java
package com.company.maven; import org.junit.Test; import static junit.framework.Assert.*; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String results = hello.sayHello("atguigu"); assertEquals("Hello atguigu!",results); } }
第五步:运行几个基本的Maven命令,运行Maven命令时一定要进入pom.xml文件所在的目录
打开cmd命令行,进入Hello项目根目录(pom.xml文件所在目录)执行mvn compile命令,查看根目录变化 cmd 中继续录入mvn clean命令,然后再次查看根目录变化 cmd 中录入 mvn compile命令, 查看根目录变化 cmd 中录入 mvn test-compile命令, 查看target目录的变化 cmd 中录入 mvn test命令,查看target目录变化 cmd 中录入 mvn package命令,查看target目录变化 cmd 中录入 mvn install命令, 查看本地仓库的目录变化
六、Maven本地仓库的配置
- Maven的核心程序并不包含具体功能,仅负责宏观调度。具体功能由插件来完成。Maven核心程序会到本地仓库中查找插件。如果本地仓库中没有就会从远程中央仓库下载。此时如果不能上网则无法执行Maven的具体功能。为了解决这个问题,我们可以将Maven的本地仓库指向一个在联网情况下下载好的目录
- Maven默认的本地仓库:~.m2\repository目录
- Maven的核心配置文件位置:就在我们解压目录中的conf\setting.xml文件中
<localRepository>以及准备好的仓库位置</localRepository>
记得前面那个repo.zip么,我们将这个目录添加到配置文件中
因为Maven是国外开发的,所以它的中央仓库也是在国外,我们要安装相关的jar可能需要翻墙(其实可以加个配置,使用国内的镜像仓库就好)直接在setting中添加下面的配置信息,我添加的是阿里的镜像源,后面会讲这个知识点,先照着我的写
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
七、IDEA配置Maven
前面手动创建只是为了让大家了解它的构造,我们实际开发中当然不可能这么麻烦,直接在IDEA中配置就好
第一步,打开Maven的配置设
第二步,设置maven的安装目录及本地仓库
第三步,勾选配置
八、第二个Maven
第一步:新建一个项目MavenProject,直接右键,建立一个空白文件夹
第二步:右键→new Module→Maven→创建一个Hello工程模块
main目录用于存放主程序。 test目录用于存放测试程序。 java目录用于存放源代码文件。 resources目录用于存放配置文件和资源文件
第三步 : 配置Maven的核心配置文件pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- groupId 公司域名倒叙+项目名称 --> <groupId>com.company.helloworld</groupId> <!-- 模块名称 --> <artifactId>Hello</artifactId> <!-- 版本号 --> <version>1.0-SNAPSHOT</version> <dependencies> <!-- 添加第三方jar包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> </project>
第四步:编写主代码,在src/main/java目录下新建文件Hello.java
package com.atguigu.maven; public class Hello { public String sayHello(String name){ return "Hello "+name+"!"; } }
第五步:编写测试代码,在/src/test/java目录下新建测试文件HelloTest.java
package com.company.helloworld; import org.junit.Test; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String maven = hello.sayHello("Maven"); System.out.println(maven); } }
第六步:使用Maven的方式运行Maven工程,在右侧那个Maven中
九、Maven打包插件
在我们打包我们的项目时,默认是不会将我们使用的依赖进行打包的,如果想要将我们程序所需要的依赖连同我们的项目一起打包,Maven也可以做到,只需要将下面的内容放到pom.xml中就好了
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!-- 指定主类 --> <mainClass>xxx.xxx.XXX</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
十、总结
本章主要介绍了Maven的基本使用,学到这里我们要清楚知道,Maven就是为了方便工程管理的,它就是一个仓库管理员,有本地仓库和远程仓库,可以让我们方便是使用别人开发好的jar包,也可以让我们进行项目的部署与管理。
到此这篇关于Java基础之初识Maven的文章就介绍到这了,更多相关Java Maven内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!