1. Maven 的简介
1.1 简介
Maven 这个词可以翻译为"专家","内行"。作为Apache 组织中的一个开源项目,主要服务于基于java平台的项目构建,依赖管理和项目信息管理。
无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷开发,maven 都能大显身手。
1.2 项目构建工具
编译、运行单元测试、生成文档、打包和部署等,就是构建。
(1)Ant 构建
最早的构建工具,基于IDE,大概是2000年有的,当时是最流行的java构建工具,不过它的xml脚本编写格式让xml文件特别大。对工程构建过程中的过程控制特别好。
(2)Maven 【JAVA】
项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件项目管理工具。它填补了Ant 缺点,Maven 第一次支持了从网络上下载的功能,仍然采用 XML 作为配置文件格式。 Maven 专注的是依赖管理,使用Java 编写。
(3)gradle
属于结合以上两个的优点,它继承了 Ant 的灵活 和 Maven 的生命周期管理,它最后被 google 作为了Android 御用管理工具。它最大的区别是不用 XML 作为配置文件格式,采用了DSL 格式,使得脚本更加简洁。
目前市面上Ant 是比较老的,所以一般是一些比较传统的软件企业公司使用,Maven使用Java编写,是当下大多数互联网公司都会使用的一个构建工具,中文文档也比较齐全,gradle 是用groovy 编写的,目前比较新型的构建工具,一些初创互联网公司会使用,以后会有很大的使用空间。
1.3 Maven 的四大特性
1.3.1 依赖管理系统
Maven 为Java 世界引入了一个新的依赖管理系统 jar 包管理, jar 升级时修改配置文件即可。在Java 的世界中,可以用 groupId、artifactId、version 组成的Coordination(坐标)唯一标识一个依赖。
任何基于Maven 构建的项目自身也必须定义这个三项属性,生成的包可以时jar 包,也可以是 war 包或者 jar 包,一个典型的依赖引用如下所示:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency>
坐标属性的理解:
Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。
(1)groupId
定义当前 Maven 项目隶属的实际项目-公司名称。(jar 包所在仓库路径)由于Maven中模块的概念,因此一个实际项目往往会被划分为很多模块。比如spring 是一个实际项目,其对应的Maven 模块会有很多,如Spring-core, spring-webmvc等。
(2)artifactId
该元素定义实际项目中的一个Maven 模块-项目名称。推荐的做法是使用实际项目名称作为artifactId的前缀。比如:spring-bean,spring-webmvc等。
(3)version
该元素定义Maven项目当前所在的版本。
Version格式:X.X.X-里程碑
比如:1.0.0-SNAPSHOT
第一个X:大版本,有重大变革
第二个X:小版本,修复bug,增加功能
第三个X:更新
里程碑版本:
SNAPSHOT:快照,开发版本
alpha: 内部测试
beta: 公开测试
Release | RC :发布版
GA :正常版本
1.3.2 多模块构建
在maven 中需要定义一个parent POM 作为一组module 的集合 POM。在该POM中可以使用<modules> 标签来定义一组子模块。parent POM 不会有什么实际构建产出。而parent POM 中的build 配置以及依赖配置会自动继承子module。
1.3.3 一致的项目结构
Ant 时代大家创建Java 项目目录时比较随意,然后通过Ant 配置指定哪些属于 source, 哪些属于testSource 等。而Maven 在设计之初的理念就是 Conversion over configuration(约定大于配置)。其制定了一套项目目录结构作为标准的Java 项目结构,解决不同IDE 带来的文件目录不一致问题。
1.3.4 一致的构建模型和插件机制
2. Maven 的安装配置和目录结构
2.1 Maven 的安装配置
(1)检查JDK的版本
JDK 版本 1.7 及以上,建议用1.8 及以上版本。
(2)下载Maven
下载地址:Maven – Download Apache Maven
建议下载3.0以上版本。
(3)解压下载包,Maven不需要执行文件来安装,直接将文件解压即可使用,但要配置系统环境变量,如下:
注:maven 解压后存放的目录不要包含中文和空格。
(4)cmd验证配置结果
Maven安装成功。
详细的Maven知识可以参考本人专栏中的文章:
(1) maven基础_menergy-CSDN博客
maven基础_龙泉太阿的博客-CSDN博客
(2) 搭建Nexus仓库管理器(私服)_menergy-CSDN博客
搭建Nexus仓库管理器(私服)_龙泉太阿的博客-CSDN博客
2.2 认识maven目录结构
Maven 项目目录结构:
目录 | 目的 |
${basedir} | 项目根目录,存放pom.xml和所有的子项目 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件 |
${basedir}/src/test/java | 项目的测试类,比如说 Junit代码 |
${basedir}/src/test/resources | 测试使用的资源 |
2.3 修改默认配置
(1)修改默认仓库位置
打开maven 目录 --> conf --> settings.xml
备份原版settings.xml为settings_bk.xml (非必须)
添加仓库位置配置:仓库时用来存放jar包的
注:仓库位置改为自己本机的指定目录,“/”不要写反。
(2)更改阿里镜像,加快依赖下载
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus.aliyun</name> <url>https://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
注:第一次下载都会比较慢。
如果编译不成功,可能出现的问题:
- 不是使用管理员权限执行doc命令
- JDK环境配置有问题,检查或重装JDK
- 代码编写时,类里面没有设置包名(如果编译时类没有加包名,执行时也不需要加报名)
3. Maven 命令
maven 的命令格式: mvn [plugin-name]:[goal-name]
命令代表的含义:plugin-name 插件的 goal-name 目标
(1)常用命令:
命令 | 描述 |
mvn clean | 清理项目生产的临时文件,一般时模块下的target目录 |
mvn compile | 编译源代码,一般编译模块下的src/main/java mul |
mvn package | 项目打包工具,会在模块下的target 目录生成jar或war 等文件 |
mvn test | 测试命令,或执行src/test/java/ 下junit的测试用例 |
mvn -version | 显示版本信息 |
mvn install | 将打包的jar或war文件复制到你的本地仓库中,供其它模块使用 |
mvn deploy | 将打包的文件发布到远程仓库,提供其它人员进行下载依赖 |
mvn site | 生成项目相关信息的网站 |
mvn eclipse:eclipse | 将项目转换为Eclipse项目 |
mvn dependency:tree | 打印处项目的整个依赖树 |
mvn archetype:generate | 创建Maven 的普通java项目 |
mvn tomcat7:run | 在Tomcat 容器中运行web应用 |
mvn jetty:run | 调用Jetty 插件的 Run 目标在Jetty servlet 容器中启动 web应用 |
注:运行maven 命令的时候,首先需要定位到maven 项目的目录,也就是项目的pom.xml文件所在的目录。否则,必须通过参数来定义项目的目录。
(2)命令参数
上面列举的只是比较通用的命令,其实很多命令都可以携带参数以执行更精准的任务。
- -D 传入属性参数
例如:mvn package -Dmaven.test.skip=true
以 -D 开头,将maven.test.skip 的值设置为true,就是告诉maven 打包的时候跳过单元测试。同理,mvn deploy -Dmaven.test.skip=true 代表部署项目并跳过单元测试。
- -P 使用指定的Profile 配置
比如项目开发需要多个环境,一般为开发、测试、预发、正式4个环境,在pom.xml 中的配置如下:
<profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <!-- 一些自定义配置,如果选中改环境,则可以使用${env}或${profile}占位符使用,但必须配置build才会生效 --> <env>dev</env> <profile>dev</profile> </properties> <activation> <!-- 默认激活该profile节点--> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!-- 测试环境 --> <id>test</id> <properties> <env>test</env> <profile>test</profile> </properties> </profile> <profile> <!-- 发布环境 --> <id>prod</id> <properties> <env>prod</env> <profile>prod</profile> </properties> </profile> </profiles>
4. IDEA 编辑器集成Maven
5. Maven 项目的创建
5.1 创建 Java 项目
创建好后,因为第一次创建,所有下载依赖会比较慢:
注:如果右下角弹出提示框,选择“enable Auto-Import”(Maven 启动自动导入)
编译项目:
点击运行编译:
编译成功。
也可以从右边打开的窗口中直接执行maven 命令编译等:
5.2 创建 Web 项目
创建成功,但是发现一些相关的目录结构没有生成,可以手动创建:
(1)在src右键新建名为“java”的文件夹,如果java文件夹时蓝色,说明时包目录,如果不是,则右键“java”文件夹,如下:
设置后java文件夹变为蓝色,即为src/main/java 包目录。
(2) 如果没有resources 目录,也可以同上面的方式创建,然后设置为“Resources Root”类型。
(3) 根据需要也可以创建和设置“src/test/java”和“src/test/resources” 目录。