文章目录
Maven简介
Maven官网:http://maven.apache.org/
Maven可以帮我们完成的工作:
- 项目构建和管理
- jar包管理
下载和安装
下载
从官网下载安装包即可。
安装
前提要求:安装了jdk(最低为1.7版本),并配置了JAVA_HOME变量。
解压下载的压缩包,将bin文件夹添加到环境变量Path当中,例如:
D:\Java\apache-maven-3.6.3\bin
或者配置了MAVEN_HOME变量之后,在Path变量中添加:
%MAVEN_HOME%\bin
如下图所示:
配置好MAVEN_HOME:
向Path变量中添加内容:
此时在cmd命令行中输入mvn,就会得到以下信息:
输入mvn -v可以查看Maven版本
此时,Maven安装成功。
配置
Maven中有一个settings.xml文件,我们可以通过这个文件对Maven的一些工作进行配置,比如jar包下载位置和本地Maven仓库的位置等等。
我们可以将settings.xml文件,复制到C:\Users[username].m2文件夹下,就可以在[username]这个用户使用时产生作用。
对windows来说,settings.xml文件的优先级:
- 如果C:\Users[username].m2下有settings.xml文件,就以这个文件为准;
- 如果没有这个文件,就以maven安装目录下的conf\settings.xml为准。
Maven目录结构
安装好的Maven文件夹目录如下:
其中:
- bin:包含了maven运行的一些命令脚本
- boot:包含了类加载器的一些东西
- conf:保存一些配置文件的
- lib:保存jar包的目录
Maven项目目录结构
项目目录结构,实际上是maven要求我们的项目必须是一个统一的目录层次,这样maven才可以帮助我们管理项目。
手动创建Maven项目
在项目开发中,我们一般都是用集成开发工具创建Maven项目,因为比较简单方便。但是本节通过手动创建Maven项目,我们可以让我们更熟悉Maven。
比如,对于一个简单的需求:打印“Hello world!”。
- 我们首先创建Maven目录
GupaoMaven
src
main
java
resources
test
java
resources
(不需要target文件夹)
pom.xml
- 在main/java文件夹下新建Student.java
class Student{
public static void main(String[] args){
System.out.println("Hello world");
}
}
- 需要配置pom.xml文件(从网上找一个简单版)
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bigdata.data.service.center.common</groupId>
<artifactId>data-service-response</artifactId>
<version>0.1.0</version>
<name>data-service-response</name>
<description>通用组件</description>
<dependencies>
<!--日志打印-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.8.0-beta4</version>
</dependency>
</dependencies>
</project>
- 编译项目
从cmd命令行进入到maven工程文件夹中(GupaoMaven),输入编译命令:
mvn compile
此时就出现了target目录:
target目录下的内容:
classes文件夹下就有了编译好的类文件:
传统做法在这个目录下java Student命令就可以运行了,但是在maven中并不这样做,后面会讲。
开发工具IDEA创建Maven项目
新建项目。
选择Maven选项,JDK版本,勾选“Create From Archetype”复选框,选择maven模板,【Next】
填入项目名称,GroupId和ArtifactId,【next】
选择本地的maven,【finish】。
创建成功
简单项目的目录结构:
如果使用maven自定义的archetype,我们可能会发现里面的工程目录结构并不是严格按照maven所需求的,这时候你需要把缺少的目录补全。
在main文件夹下new,Directory,输入缺少的文件夹名称:
然后标记为Sources目录:
Maven配置文件之settings.xml文件
settings.xml中有很多标签,修改标签内容就可以修改maven的配置
mirrors
mirrors标签,表示配置镜像所在的路径。默认的mirrors标签如下:
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
</mirrors>
默认的jar包下载地址是国外的https://repo.maven.apache…
当然这个下载地址可以改变,就是通过mirrors标签,比如我们要加上阿里云的镜像:
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
修改为国内镜像源,可以使jar包下载速度变快,从而使我们的项目编译速度快很多。
localRepository
标识本地Maven仓库位置的标签,后面章节我们会详细讲。默认是注释掉的:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
暂时不需要掌握的标签
-
interactiveMode
表示maven是否需要和用户交互以获得输入数据。 -
offline
编译操作时,是否允许连接到互联网,标识maven是否需要在离线模式下运行。 -
pluginGroups
当插件组织id(groupId)没有显示提供时,供搜寻插件组织id的列表。 -
proxies
用来配置不同的代理的。 -
servers
仓库的下载和部署是在pom.xml文件中定义的,比如说用户名,密码需要访问远程仓库的时候,有时候需要安全认证,这个认证就可以配置在servers标签中。 -
profiles
根据环境参数来调整构建配置的列表。
Maven仓库
settings.xml中的localRepository标签:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
maven把jar包自动下载下来之后,保存jar包的位置我们可以自己指定,默认的位置是当前用户目录下/.m2/repository。
我们可以通过编辑这个标签指定本地Mavne仓库地址,比如:
<localRepository>D://Java//mavenLocalRepository</localRepository>
之后我们编译一个maven项目,下载的jar包就会保存到新的地址:
ps:如果一个jar包在本地仓库中存在(版本号也一致),那么就不会重复下载,这样可以节约本地的存储空间。
Maven项目的pom.xml文件
pom:project object model 项目对象模型
pom.xml首先包含三个标识项目唯一性的标签:
- groupId标识项目组(填写公司的域名)
- artifactId项目名称
- version版本号
这三个是必填标签,例如:
<groupId>com.gupao</groupId>
<artifactId>MyMavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
pom.xml中其他的一些标签,比如:
- dependencies标签,配置项目中具体需要哪些jar包
- properties标签,用来定义pom中一些属性的
- build指定如何构建当前项目的
- source指定当前构建的source目录
- plugin指定了进行构建时使用的插件
- packging指定当前构建的项目类型
一些重要的标签我们下文会提到。
pom文件是可以继承的,超级pom文件等等。比如一个pom文件中定义了一些东西,另外一个pom文件也想使用,这时候就可以用继承的方式。
Maven项目依赖
maven项目中要想下载指定的jar包,实际上就是在pom.xml文件的dependencies标签中进行配置。
具体写法:在 https://mvnrepository.com/ 中进行搜索。
例如,我们为项目配置一个mybatis的jar包:
<dependencies>
<!--配置一个具体需要的jar包-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>
再次编译项目,在IDEA中只需要点击Import Changes:
本地仓库就会出现mybatis的jar包。
org.mybatis就是本地的文件目录
Maven帮我们下载jar包,不止会下载我们指定的jar包,也会下载这个jar包需要依赖的其他jar包。
Maven插件
Maven本质上是一个依赖插件执行框架。所有工作都由插件完成。Maven包含两类插件:
- Build plugins将在构建期间执行,并且应在POM中的build元素中对其进行配置。
- Reporting plugins将在网站生成期间执行,并且应在POM的reporting元素中进行配置。
几个常用的插件列表:
- clean 项目构建之后用于清理项目
- compiler 编译java源代码
- jar 构建jar文件
- war 构建war文件
- deploy 构建的项目发布到远程仓库中
例子:
<!--配置build类型的插件-->
<build>
<plugins>
<!--表示写好了一个clean类型的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
</plugin>
<!--表示写好了一个deploy类型的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
Maven之archetype
maven会帮我们定义好一些archetype,这些archetype是我们开发中常用的一些项目模板,新建项目的时候只需选择对应的archetype即可。
但是往往是官方提供的东西虽好,不是太符合个人定制化的需要。大家自己可能有一套自己觉得比较满意的archetype,所以往往会定义自己的archetype。
定义自己的archetype:
先在一个项目的pom文件中添加一个插件:
<!--表示写好了一个archetype类型的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
</plugin>
cmd命令行输入:
mvn archetype:create-from-project
在traget目录中会生成一个自定义的骨架:
在本地安装一下这个archetype:
mvn install
就把刚才项目生成的archetype安装到了本地。
Maven聚合项目
Maven实际上可以创建一个父项目,在父项目下面再创建很多的子项目。
我们下面演示如何再父项目中创建子项目:
Project --> New --> Module
选择maven
填写子项目名称
父项目中就多了一个子项目:
Maven插件之tomcat使用
使用本地安装的tomcat
maven工程的web项目结构:
Run --> Edit Configurations
点击+号,选择Tomcat Server
输入名字,configure选择tomcat的安装目录
点击OK
点击运行
maven插件形式的tomcat
如果我们不想使用本地的tomcat,可以使用maven插件形式的tomcat。
先修改项目的pom.xml文件
<!--添加一个tomcat的插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--配置一下-->
<configuration>
<path>/jack</path>
<port>8080</port>
<server>gupaotomcat</server>
</configuration>
<!--执行的标签-->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
Run --> Edit Configurations,选择Maven
填写名字,核对项目目录,填写Command line
核对相关目录:
点击【OK】
运行并访问:
这样的配置只针对当前的web项目有效,如果要应用到其他项目中,可以在其他项目的settings.xml中也配置tomcat插件。