Maven官方的定义是:Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
翻译一下:Apache Maven是一个软件项目管理和理解工具。 基于项目对象模型(POM)的概念,Maven可以从中央信息管理项目的构建,报告和文档。
Maven是java开发的,对于java来说万物皆对象,同样我们的项目也是对象,maven通过pom.xml文件来定义和配置一个项目,然后通过解析这个pom文件来构建和管理我们的项目,maven和springboot一样同样遵循约定大于配置的理念,给我们做了很多默认的配置和管理。
setting.xml是maven在当前安装的物理机上的一个全局的配置,作为java开发一般主要关注的部分就两个地方:
**localRepository**:就是配置自己当前开发的这个机器的jar包放在哪里,也就是我们通常所说的本地仓库
**mirrors**:镜像列表,当我们本地仓库的jar包不支持我们当前工程的构建和运行时,这时候maven就会通过镜像列表中配置的镜像去下载我们所需要的jar包
当然如果我们作为公司的架构师或者研发主管,可能我们需要创建当前公司的一个私有的maven仓库这时候我们就需要关注:
**servers**:认证配置,maven配置账号、密码、分组,权限,可访问文件目录的地方
**proxies**:Http代理配置,当私有仓库没有我们需要的jar包了,就会通过代理来访问外部的maven仓库来下载jar包
当然如果我们需要更加深入的了解所有的setting配置,我们可以查阅对应版本的maven官方的信息,我使用的maven版本是3.6.0,地址为:
https://maven.apache.org/ref/3.6.0/maven-settings/settings.html
以下是maven中默认下的setting.xml文件的一些配置的注解
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>G:\mvn_localRepositorylocalRepository>
<pluginGroups>
pluginGroups>
<proxies>
proxies>
<servers>
servers>
<mirrors>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
<profiles>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
profiles>
<activeProfiles/>
settings>
作为java开发比较关注而又不太清晰的地方:
modelVersion POM文件模型的版本,来源于当前物理机上安装的maven的超级POM的版本,工程下的pom.xml中我们没有配置的属性都是取这个超级pom文件中的值,这个超级文件在maven的安装目录的lib文件夹下的maven-model-builder-3.6.0.jar中
超级pom文件中跟我们平时工作相关性比较高的地方:
具体的还有些啥,你们可以去自己的maven目录下去找到这个文件去看
scope:当前依赖的作用范围,默认为:compile,其他选择:runtime, test, system, provided,分别作用是啥,官方介绍如下:
compile:对整个程序的main和test中的代码均生效
test:只对maven项目中test中代码生效
provided:只在开发中有效,在打包,运行不生效
runtime:程序运行时有效
system:引入系统包,一般会影响跨平台部署,不建议使用
官方地址:
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
maven3.6.0的pom文件的官方配置信息的地址:
https://maven.apache.org/ref/3.6.0/maven-model/maven.html
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.1.RELEASEversion>
<relativePath/>
parent>
<groupId>com.examplegroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>demoname>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<version>version>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
<modules>
<module>module>
modules>
<issueManagement>
issueManagement>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>groupId>
<artifactId>artifactId>
dependency>
dependencies>
dependencyManagement>
project>
maven创建项目,maven创建项目类似于前端vue项目的脚手架,我们常用的类型有两种:
maven-archetype-quickstart
maven-archetype-webapp
当然maven创建项目的方式也有两种,一种是在你想要创建项目的目录下执行maven的命令:
mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4
**maven项目的目录结构:**
**pom**:pom是我们maven对于整个工程的一个定义和配置的文件,maven就是通过这个文件来构建和管理我们项目的
**src**:src下存放的是我们的代码和一些配置文件,以及资源文件,mian下面是源代码相关的,test下是测试相关的
**tartget**:编译,运行,测试,打包生成的相关的文件都会存放在该目录下
maven常用的命令,如果不是开发工具内执行maven命令,一定要进入到你要执行命令的项目的pom文件所在的目录下执行这些命令:
**mvn clean**:清理target目录
**mvn compile**: 项目编译
**mvn test**:执行当前项目test目录下带有Junit注解的测试用例,同时会生成结果放在target目录下
**mvn package**: 按照pom文件制定的打包方式和插件打包,生成的包会在target目录下
**mvn install**:打包当前项目,同时将当前项目的打包文件发布到本地仓库
**mvn deploy** 发布到当前项目的jar包到本地仓库和远程仓库,在项目组协同工作时,基础jar包的更新必须有这个操作,否则其他项目引入就报错了,当然需要配置对应的发布仓库的地址