1. Maven简介
Apache Maven 是一个软件项目管理工具。基于项目对象模型(POM)的理念,通过一段核心描述信息来管理项目构建、报告和文档信息。
Maven 是一个意第绪语(犹太人使用的国际语)单词,意思是知识的累加器。它最开始是被用来简化 Jakarta Turbine 项目的构建过程。在 Jakarta Turbine 项目中有几个不同的项目,虽然它们的Ant构建文件差异很小,但是 jar 包都在 CVS 上。于是想要找到一个标准而又简单的项目构建方法,既可以清晰地定义出这个项目由什么构成并发布项目信息,又能在不同项目间共享Jar包。
现在,任何一个基于Java的项目都能使用Maven来构建和管理,使 Java 开发人员的日常工作变得更轻松,让Java项目更容易被理解。
2. Maven使用
2.1 安装
必备条件: 已安装JDK
注意事项: Maven 3.3 及更高版本要求 JDK1.7 或者更高版本
2.2 Windows
下载解压缩
●下载 apache-maven-{版本号}-bin.zip
●找到合适的目录:最好无空格和中文,解压,内容如下
配置环境变量
●计算机 > 属性 > 高级系统设置 > 环境变量 > 系统变量
●新建 M2_HOME 变量,内容为 {解压路径}\apache-maven-{版本号}
●编辑 Path 变量,在内容结尾加上 ;%M2_HOME%\bin;
2.3 Linux
包管理器安装
下载安装
●下载 apache-maven-{版本号}-bin.tar.gz
●配置环境变量 export PATH=/opt/apache-maven-{版本号}/bin:$PATH
2.4 验证
Windows 打开 Cmd,Linux 运行 Shell,看到下面信息表示安装成功。
2.5 设置Maven
2.5.1 自定义仓库位置(可选)
Maven 下载的 jar 包默认存储到 ${user.home}/.m2/repository
编辑 {安装路径}\config\settings.xml,在下面增加一行填入自定义位置:
Linux 查看安装路径
2.5.2 设置国内镜像(可选)
Maven 默认从中央仓库 central 下载
改为国内镜像速度更快
编辑 {安装路径}\config\settings.xml,在 标签里加入新的镜像:
3. 使用
3.1 快速上手
3.1.1 新建示例项目
命令行不是必须的,但这个过程能有助于理解在 IDE 中的操作。
命令行新建项目
Windows 打开 Cmd,Linux 运行 Shell,执行下面指令。
执行成功可以看到下面字样:
POM.xml 包含了命令中的信息
目录结构
quickstart 项目的结构如下:
●项目源码:src/main/java
●Web 项目源码:src/main/webapp
●测试源码:src/test/java
●Maven 项目结构(Project Object Model POM):pom.xml
注意: 配置文件,如 log4j.properties 需要新建 src\main\resources 目录。这样编译时会打包到生成的 jar 中。
提示: 生成目录结构,Windows 在 Cmd 中输入 tree /f,Linux 安装 tree 程序后可直接输入 tree。
3.1.2 构建项目
Windows 打开 Cmd,Linux 运行 Shell,执行下面指令。
执行成功可以看到下面字样:
查看生成结果,在项目中新增了 target 目录,里面主要关注以下文件:
●class 文件:target\classes\org\tyh\mvn\quickstart\App.class
●test-classes 文件:target\test-classes\org\tyh\mvn\quickstart\AppTest.class
●jar 文件:target\mvn-quickstart-1.0-SNAPSHOT.jar
3.1.3 运行
Windows 打开 Cmd,Linux 运行 Shell,执行下面指令。
执行测试:
执行成功可以看到下面的结果:
3.2 新增依赖
3.2.1 搜索Maven
搜索
搜索时可采用高级搜索,g:{groupId} a:{artifactId}。例如 g:log4j a:log4j 就会列出 log4j 的最新版本。
●其他搜索仓库
注意: 类似 slf4j 这样依赖其他实现的包,需要查看官方文档,确认需要配合使用的 jar 包。否则会出 现编译通过,运行报错 的情况。
3.2.2 加入依赖项
3.2.3 验证
修改 App 类,加入 Log 和 测试代码:
执行程序之前,要找到依赖的 jar 文件所在的目录。默认是在 {用户主目录}/.m2/ 目录 下,利用 dependency:copy 插件 可以拷贝到 target\dependency 目录:
查看结果:
在命令行运行时,用 -cp 加入依赖的 jar 所在目录:
注意: 编译前需要加入 log4j.properties 到 src\main\resources 目录。下面是一个 Windows 下的 log4j.properties。
3.3 IDE中使用
3.3.1 Eclipse
新建项目
1.新建 Maven 项目
●File > New > Project
●选择 Maven Project (目录报错及解决办法*)
●(可选)项目类型 maven-archetype-simple 或其他类型
●输入 Group Id, Artifact Id, Name,Finish
2.添加依赖
●pom.xml 右键菜单 > Maven > Add Dependency
●在输入框中输入,比如 slf4j 会自动列出匹配结果,OK
●加入新的依赖保存文件,会在 Maven Dependencies 中列出 jar 及路径,并添加到项目的 classpath 中
3.编码
●编写 Java 代码,调试
4.构建
●项目 右键菜单 > Run As > Maven build
●第一次运行会提示输入 Maven build 的目标:Goal 里填写 package 进行构建 (支持的常用命令可以在这里找到 Maven in 5 Minutes:Maven Phases)
导入项目
●File > Import
●选择 Maven > Existing Maven Project
●选择项目 pom.xml 目录,Projects: 下面勾选 target
●点击完成
3.3.2 Idea
1.新建 Maven 项目
●File > New > Project
●选择 Maven
●(可选)项目类型 maven-archetype-simple 或其他类型
●输入 Group Id, Artifact Id
●输入项目名称,Finish
2.添加依赖
●pom.xml 手动添加依赖信息
●加入新的依赖保存文件,会在 External Libraries 中列出 jar 及路径,并添加到项目的 classpath 中
3.编码
●编写 Java 代码,调试
4.构建
●pom.xml 右键菜单 > Build module’module name’
●Maven build 会提示警告:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除:可加入配置项解决
4. 常见问题与办法
4.1 如何设置编译支持的 JDK 版本?
全局指定
下面的脚本指定编译版本兼容 JDK 1.7
指定插件
在不改变全局兼容性的情况下,可以在插件中指定。例如,下面的脚本指定了 maven-compiler-plugin 编译的版本兼容 JDK 1.7。
4.2 如何指定自己的目录结构?
可以通过设置 节点下 , 参数指定。
4.3 在 pom 文件中配置了依赖,编译时还会报错。
下载的 jar 文件可能有问题。
●检查 maven 仓库地址,在搜索条件中检查 groupId 和 artifactId 是否正确。
●mvn clean 清理文件。
●mvn package 重新编译。
4.4 [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
POM 文件中没有指定编译时编码格式,可加入下面属性指定为 UTF-8。
类似的问题: [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
4.5 Invalid project description. … overlaps the workspace …
Eclipse 新建 Maven 项目时,可能会报告此错误。解决办法两种:
1.选择 workspace 以外的目录作为项目目录;
2.新建 Java Project,然后转为 Maven 项目:右键菜单 Config -> Convert to Maven Project
4.6 Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
Idea 在 Maven Build 时发出警告,在 pom.xml 中加入以下内容: