Maven是java的一个依赖管理工具。所谓依赖就是指在Java开发过程中引入的各种jar包和第三方库,而可能这些库本省还要引用其他的库,这样我们直接引用的称为直接依赖,库的依赖称为间接依赖。如果我们手动去引入这些依赖,过程将变得十分繁琐,因此需要一个仓库Maven来为我们管理并引入这些依赖。Maven中把每个依赖包称为构件。
那么我们如何从仓库中准确的查找到每个构件呢?这就需要通过坐标来完成,maven仓库的坐标由groupId、artifactId、version三者组成。其中groupId为你的公司名称,artifactId为你的项目名,version为项目的版本号,package为所需要创建的包名。即我们在maven仓库中查找依赖时,先找到公司名groupId,再找到项目名,最后找到版本号即可唯一确定一个依赖。
maven的仓库分为本地仓库和远程仓库,本地仓库是指maven会将依赖包下载到本地的某个位置,查找依赖时先查找本地仓库,如果没找到才回到网上的远程仓库进行查找并下载。如果大家都访问maven的同一个仓库,会造成负载压力过大且访问过慢,因此maven在不同地方提供了镜像仓库供人们就近访问。
maven还提供了许多插件,我们可以使用插件很便捷地完成项目的构建、编译、打包等操作。
在maven中如果A依赖B,B依赖C,C依赖D,而A依赖E,E也依赖D,那么A会依赖关系较近E的D。如果两个依赖据A一样近,则会根据依赖解析的先后顺序进行依赖。
安装:首先从Maven官网下载所需maven的压缩包,之后将其解压,最后将解压目录下的bin文件夹添加到PATH路径中就可以在命令行下使用mvn -v查看版本信息。可以看到所使用的Java版本,注意maven使用Java的版本是否为系统所使用的java
PS D:\Program\IDE\Java\maven\bin> ./mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\Program\IDE\Java\maven\bin\..
Java version: 1.8.0_231, vendor: Oracle Corporation, runtime: D:\Program\IDE\Java\jdk8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
在maven安装目录下的/conf/settings.xml文件是maven的全局配置文件,可以在其中对maven的不同属性进行设置。不同用户可以根据自己需要修改用户目录下/.m2/settings.xml文件,这是用户的配置文件。配置文件的优先级从高到低
为:pom.xml
、用户配置 settings.xml
、全局系统 settings.xml
。如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。配置文件的主要内容如下所示
配置仓库:在
D:/Java/maven/repository
false
使用某个插件,如果没有指定 groupId 的时候,maven 就会使用该列表中的插件。
false
org.codehaus.mojo
设置镜像源:从国内镜像源下载依赖比直接使用默认下载源更快,在
aliyunmaven
central
aliyun maven
https://maven.aliyun.com/repository/public
代理进行配置
myproxy
true
http
proxy.somewhere.com
8080
proxyuser
somepassword
*.google.com|ibiblio.org
服务端的整体配置。如安全证书之类的信息应该配置在 settings.xml 文件中,避免配置在 pom.xml 中
server001
my_login
my_password
${usr.home}/.ssh/id_dsa
some_passphrase
664
775
还有其他的配置属性可以在
test
false
1.8
Windows XP
Windows
x86
5.1.2600
mavenVersion
2.0.3
${basedir}/file2.properties
${basedir}/file1.properties
...
可以通过配置文件中的
如下所示,当该profile激活后,可以在POM文件中通过${user.install}访问到值
...
${user.home}/our-project
...
在
...
codehausSnapshots
Codehaus Snapshots
http://snapshots.maven.codehaus.org/maven2
default
false
always
warn
true
never
fail
...
...
针对上面配置的不同
...
env-test
配置JDK版本:maven默认使用jdk-1.5版本,如果需要指定jdk默认版本,需要在settings.xml文件中配置如下
jdk-1.8
true
1.8
1.8
1.8
1.8
maven常用的命令如下:
mvn compile |
编译项目 |
mvn test |
测试项目 |
mvn package |
打包项目 |
mvn install |
安装jar包到本地仓库 |
mvn clean |
删除编译好的目标文件 |
通过archetype插件创建项目:在命令行输入mvn archetype:generate会开始自动创建maven项目,如下所示会提示选择要创建的maven类型编号、并输入groupId、artifactId、version、package等内容。
如下所示为生成项目的pom.xml文件,其中
4.0.0
org.example
MavenTest
1.0-SNAPSHOT
jar
MavenTest
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
也可以在一条命令行中指定 groupId、artifactId、version、package等内容
mvn archetype:generate -DgroupId=com.tory -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp
最后使用jetty容器运行项目:mvn jetty:run ,注意需要在pom中引入jetty插件,当然也可以引入Tomcat插件在该容器中运行项目。
如果是spring boot项目,则可以使用mvn spring-boot:run来运行项目。在编译过程中遇到如下两个报错
Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0
Failed to execute goal org.apache.,maven.plugins:maven-compiler-plugin:3.8.1
这是由于版本依赖出现问题,需要在pom中修改插件的依赖如下:
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-resources-plugin
2.4.3
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
IDEA中使用Maven
在IntelliJ IDEA中创建Maven项目更为简便,首先在IDEA中配置maven:在IDEA中打开->File | Settings | Build, Execution, Deployment | Build Tools | Maven对如下三个选项栏进行配置,分别对应maven的安装目录,配置文件及仓库的目录
接着创建一个Maven项目,点击 File | New | Project弹出如下界面,选择maven类型并点击Next。如果需要创建模板可以勾选create from archetype并选择所需模板
接下来设置项目名称与位置,并且设置GroupId、ArtifactId、Version信息
最后选择maven的信息,点击Finish创建完成
POM是项目对象模型(Project Object Model)的简称,创建好maven项目后会在根目录下生成pom.xml文件对依赖进行管理。如下所示,
首先
4.0.0
org.example
SpringMVC
1.0.0-SNAPSHOT
war
SpringMVC Maven Webapp
http://www.example.com
junit
junit
4.11
test
SpringMVC
maven-clean-plugin
3.1.0
pom的依赖可以进行继承,例如在父类项目的pom的
junit
junit
4.13
test
有时我们需要引入本地的jar包,例如我把auth-1.1.10.jar放在src/lib文件夹下,使用maven引入如下,其中
cmb
netpayment
1.0
system
${basedir}/src/lib/auth-1.1.0.jar
Maven默认仅打包当前项目,而不会将依赖一起打包,如果运行在没有依赖的服务器上则有可能会报错,因此可以通过maven-assembly-plugin插件将依赖一同打包
maven-assembly-plugin
jar-with-dependencies
make-assembly
package
single
mvnw
是Maven Wrapper的缩写。因为我们安装Maven时,默认情况下,系统所有项目都会使用全局安装的这个Maven版本。但是,对于某些项目来说,它可能必须使用某个特定的Maven版本,这个时候,就可以使用Maven Wrapper,它可以负责给这个特定的项目安装指定版本的Maven,而其他项目不受影响。
安装Maven Wrapper最简单的方式是在项目的根目录(即pom.xml
所在的目录)下运行安装命令:它会自动使用最新版本的Maven。注意0.7.6
是Maven Wrapper的版本
mvn -N io.takari:maven:0.7.6:wrapper
my-project
├── .mvn
│ └── wrapper
│ ├── MavenWrapperDownloader.java
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
发现多了mvnw
、mvnw.cmd
和.mvn
目录,我们只需要把mvn
命令改成mvnw
就可以使用跟项目关联的Maven操作了。