Maven
安装(Windows)
- 下载:官网下载对应安装包即可。
- 解压
- bin目录
- 包含mvn.cmd和mvnDebug.cmd两个命令行工具
- conf目录
- 常用的setting.xml文件
- lib目录:由于maven是用java语言编写的,因此首先要求系统拥有java环境,而这个lib目录包含的就是maven依赖的jar包。
- bin目录
- 配置环境变量:参考上图,将apache-maven-3.6.0目录配置到环境变量MAVEN_HOME中,然后将%MAVEN_HOME%\bin加入到path环境变量中。
- 打开cmd窗口,输入命令
mvn -v
测试是否成功
Maven核心概念
- pom、坐标、依赖管理
<!--maven 的版本 -->
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.17.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 组织id,一般是公司域名的倒写,可以是任意字符串,格式可以为:1.域名倒写 例如com.baidu 2.域名倒写+项目名 例如com.baidu.appolo -->
<groupId>com.fenglu</groupId>
<!-- 项目名称,也可以是模块名称,对应groupid中项目的子项目 -->
<artifactId>springboot_cache</artifactId>
<!-- 项目的版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT ,因此我们在项目中使用的一般是不带snapshot的版本。version使用三维数字表示,例如1.1.0 分别是主版本号,次版本号,当增加功能时(不影响 API 的兼容性),Y 需递增;修订版本号,当做 Bug 修复时(不影响 API 的兼容性),Z 需递增。 -->
<version>0.0.1-SNAPSHOT</version>
<name>springboot_cache</name>
<description>springboot cache project for Spring Boot</description>
<!-- 依赖 -->
<dependencies>
<!-- maven会根据下面这个坐标,先根据groupid再根据artifactid最后根据version来查找本地仓库中是否有对应的依赖,如果没有,就去远程仓库下载 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
</dependencies>
<!-- 配置属性,例如下面这个就是告诉maven,使用的java版本是1.8 -->
<properties>
<java.version>1.8</java.version>
</properties>
<!-- 打包后压缩文件的扩展名,默认jar -->
<packaging>war</packaging>
<!-- build表示构建相关的配置,例如设置编译插件的jdk版本 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
groupID+artifactid+version 三个决定了maven项目的坐标,因此以后我们可以根据这三个来确定某个项目,并且这个坐标也决定了在仓库中的路径。例如在maven的中央仓库中搜索就是根据groupid或者artifacts来搜索
- 约定的目录结构
在我们的项目中,如上图所示这个hello项目,都是一些约定的目录结构。src:源代码,main:主程序,java:主程序的java源码,resources:主程序的配置文件
Maven自定义属性
例如在pom文件中,我们引用了spring-core spring-aop spring-cache等等,这样在pom文件中每个dependency都有一个version,并且version的值是相同的这个时候我们可以用自定义属性的方式来代替这个版本号。下面这个例子中的spring.version可以自己任意命名
<properties>
<java.version>1.8</java.version>
<spring.version>2.5.0</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
Maven 命令
下面的命令都可以对应到idea中。
为什么要叫Lifecycle(生命周期)
对于maven来讲,他的生命周期就是清理、校验、编译、测试、打包、部署,因此对应到命令上就是上图所示。
mvn compile
编译主程序(main文件夹下)命令,打开pom文件所在目录,打开命令行窗口,输入该命令,则可以将pom文件所在项目的main文件夹下的所有java文件编译为class文件- 如果电脑或本地仓库中没有main文件夹中java代码依赖的jar包,则maven会自动 将这些依赖的jar包根据setting配置文件中指定的仓库位置将这些依赖的jar包下载到仓库中
- 编译完成后会在pom文件的同级目录中出现一个名为target(结果目录) 的文件夹,这个文件夹存放的就是编译后的项目class文件
- 并且会将main/resources文件夹下的配置文件拷贝到target/classes目录下
mvn test-compile
编译测试程序(test文件夹下)命令,上面的compile命令是编译main文件夹下的类,而test-compile 编译的是test文件夹中的类,参考约定目录结构中的图。编译完成后会在target文件夹下生成test-classes文件夹中- clear :将编译后的 target文件夹删除,使用的插件是maven-clean-plugin
mvn test
测试,运行该命令,首先扫描代码,然后会依次执行 clear、 compile、 test-compile命令,然后运行测试代码,也就是我们常用的Junit工具的 @test注解标识的方法,最后打印出测试报告。测试 报告存放的位置在 target/surefire-reports/目录下。只有当测试通过了才能执行package、install、deploy等后续命令mvn package
打包命令,当我们的项目要部署的时候,一般会将项目打包,这里的打包就是根据pom文件中packaging标签内的值进行打包。默认是jar包,以前的web项目都是war包。使用的是上图中的 jar 插件来打包,打包后的位置在target / artifactid + -maven-+version.jar 生成的包名也是根据pom文件中的artifactid和version组合成的。并且 包文件内只包含main文件夹下的东西,不包含测试test文件夹下的东西- mvn install 安装主程序,将本工程打包,安装到本地仓库中(一般 不用)。安装完之后如果其他项目要引用该项目,则依赖方式与其他的jar引用方式相同
mvn deploy
部署,因为部署到服务器一般要做一些其他配置,这个基本不用。
Maven插件配置
上面这些命令所使用的的插件都是maven内置的
<!-- build表示构建相关的配置,例如设置编译插件的jdk版本 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
自定义配置插件,很简单,只需要搜索对应的插件,然后将其复制粘贴在这个build标签下的plugins标签内即可。例如我们需要自定义一个编译插件,只需要 搜索maven编译插件,然后将提供的标签复制过来就行。
IDEA中使用maven
idea 中内置了maven,一般不用,因为内置修改maven的设置不方便 ,这里不多叙述。
- idea 中的setting是只对当前工程生效,OtherSettings是为了以后新建项目时生效,因此我们要将两个入口的设置都重新配置一下maven
- 覆盖idea内置maven
- maven home directory表示Maven的安装目录
- user settings file 自定义配置文件路径,如果要修改需要勾选后面的override。当修改了该选项后 ,如果setting文件中有配置本地仓库,则下面的local repository会自动变为该settings文件中的仓库路径。
- local repository 本地仓库路径,如果要修改需要勾选后面的override
- 打开maven 设置,找到下面的runner,这里有几个需要配置的,一个就是vm option,不重要,不写了、
常用技巧
- 当我们将一个新的项目导入到idea的时候,会看到在maven的界面中显示依赖错误,下面标红,这个时候可以右键pom.xml 然后点击Reimport,重新导入。也可以点击下图所示
这个刷新会将这里的 所有项目都刷新,而使用pom文件的reimport则只重新导入当前项目的。
Maven资源插件
通过命令测试我们发现,在compile命令执行的时候,会将resources文件夹下的配置文件复制到target/classes目录中,那么如果我们想将其他一些资源文件xxx.properties或xxx.xml文件拷贝到classes目录中,就可以使用下面这种方式,在build标签中加入resource标签,来告诉maven在编译的时候将这个目录下的所有以properties和xml结尾的文件都拷贝到classes目录中。拷贝的位置问题…
文章来源:B站动力节点maven基础教程