教你从头开始使用 Maven,从此项目打包无需担心
文章目录
一、主要内容
二、Maven的简介
2.1. 简介
2.2. 项⽬构建
2.3. 项⽬构建⼯具
2.4. Maven的四⼤特性
2.4.1. 依赖管理系统
2.4.2. 多模块构建
2.4.3. ⼀致的项⽬结构
2.4.4. ⼀致的构建模型和插件机制
三、Maven的安装配置和⽬录结构
3.1. Maven的安装配置
3.1.1. 检查JDK的版本
3.1.2. 下载Maven
3.1.3. 配置Maven环境变量
3.1.4. 检查Maven是否安装成功
3.2. 认识Maven⽬录结构
3.2.1. 创建⼀个⽂件夹作为项⽬的根⽬录
3.2.2. 编写主函数
3.2.3. cmd 下编译并运⾏
四、Maven命令
4.1. 常⽤命令
4.2. 命令参数
4.2.1. -D 传⼊属性参数
4.2.2. -P 使⽤指定的Profile配置
五、IDEA编辑器集成Maven环境
5.1. 设置Maven版本
六、Maven项⽬的创建
6.1. 创建 Java项⽬
6.1.1. 新建项⽬
6.1.2. 编译项⽬
6.2. 创建 Web项⽬
6.2.1. 创建项⽬
6.2.2. 修改配置文件
6.2.3. 启动项⽬
七、Maven仓库的基本概念
7.1. *仓库
7.2. 私服
7.3. 其他公共库
八、Maven环境下构建多模块项⽬
8.1. 创建 maven_parent 项⽬
8.2. 创建 maven_dao 模块
8.3. 创建 maven_service 模块
8.4. 建 maven_controller 模块
8.5. 修改模块的配置
8.6. 设置模块之间的依赖
8.6.1. maven_dao
8.6.2. maven_service
8.6.3. maven_controller
九、Maven的打包操作
9.1. 建⽴对应的⽬录结构
9.2. 添加Profile配置
9.3. 设置资源⽂件配置
9.4. 执⾏打包操作
十、Maven依赖的基本概念
10.1. 依赖的基本配置
10.2. 依赖范围
10.3. 传递性依赖
一、主要内容
二、Maven的简介
2.1. 简介
Maven【[ˈmevən]】这个词可以翻译为"专家",“内⾏”。作为Apache组织中的⼀个颇为成功的开源项⽬,Maven主要服务于基于java平台的项⽬构建,依赖管理和项⽬信息管理。
⽆论是⼩型的开源类库项⽬,还是⼤型的企业级应⽤; ⽆论是传统的瀑布式开发,还是流⾏的敏捷开发,Maven都能⼤显身⼿。
2.2. 项⽬构建
不管你是否意识到,构建(build)是每⼀位程序员每天都在做的⼯作。早上来到公司,我们做的第⼀件事就是从源码库签出最新的代码,然后进⾏单元测试,如果测试失败,会找相关的同事⼀起调试,修复错误代码。 接着回到⾃⼰的⼯作上来,编写⾃⼰的单元测试及产品代码。
仔细总结⼀下,我们会发现,除了编写源代码,我们每天有相当⼀部分时间花在了编译,运⾏单元测试,⽣成⽂档,打包和部署等繁琐且不起眼的⼯作上,这就是构建。 如果我们现在还⼿⼯这样做,那成本也太⾼了,于是有⼈⽤软件的⽅法让这⼀系列⼯作完全⾃动化,使得软件的构建可以像全⾃动流⽔线⼀样,只需要⼀条简单的命令,所有繁琐的步骤都能够⾃动完成,很快就能得到最终结果。
2.3. 项⽬构建⼯具
Ant构建
最早的构建⼯具,基于IDE, ⼤概是2000年有的,当时是最流⾏java构建⼯具,不过它的XML脚本编写格式让XML⽂件特别⼤。对⼯程构建过程中的过程控制特别好
Maven【JAVA】
项⽬对象模型,通过其描述信息来管理项⽬的构建,报告和⽂档的软件项⽬管理⼯具。它填补了Ant缺点,Maven第⼀次⽀持了从⽹络上下载的功能,仍然采⽤xml作为配置⽂件格式。Maven专注的是依赖管理,使⽤Java编写。
Gradle
属于结合以上两个的优点,它继承了Ant的灵活和Maven的⽣命周期管理,它最后被google作为了Android御⽤管理⼯具。它最⼤的区别是不⽤XML作为配置⽂件格式,采⽤了DSL格式,使得脚本更加简洁。
⽬前市⾯上Ant⽐较⽼, 所以⼀般是⼀些⽐较传统的软件企业公司使⽤, Maven使⽤Java编写, 是当下⼤多数互联⽹公司会使⽤的⼀个构建⼯具, 中⽂⽂档也⽐较⻬全, gradle是⽤groovy编写, ⽬前⽐较新型的构建⼯具⼀些初创互联⽹公司会使⽤, 以后会有很⼤的使⽤空间.
2.4. Maven的四⼤特性
2.4.1. 依赖管理系统
Maven为Java世界引⼊了⼀个新的依赖管理系统jar包管理 jar 升级时修改配置⽂件即可。在Java世界中,可以⽤groupId、artifactId、version组成的Coordination(坐标)唯⼀标识⼀个依赖。
任何基于Maven构建的项⽬⾃身也必须定义这三项属性,⽣成的包可以是Jar包,也可以是war包或者jar包。⼀个典型的依赖引⽤如下所示:
<dependency> <groupId>javax.servlet</groupId> com.baidu <artifactId>javax.servlet-api</artifactId> ueditor echarts <version>3.1.0</version> </dependency>
坐标属性的理解
Maven坐标为各种组件引⼊了秩序,任何⼀个组件都必须明确定义⾃⼰的坐标。
groupId
定义当前Maven项⽬⾪属的实际项⽬-公司名称。(jar包所在仓库路径) 由于Maven中模块的概念,因此⼀个实际项⽬往往会被划分为很多模块。 ⽐如spring是⼀个实际项⽬,其对应的Maven模块会有很多,如spring-core,spring-webmvc等。
artifactId
该元素定义实际项⽬中的⼀个Maven模块-项⽬名, 推荐的做法是使⽤实际项⽬名称作为artifactId的前缀。 ⽐如: spring-bean, spring-webmvc等。
version
该元素定义Maven项⽬当前所处的版本
2.4.2. 多模块构建
项⽬复查时 dao service controller 层分离将⼀个项⽬分解为多个模块已经是很通⽤的⼀种⽅式。
在Maven中需要定义⼀个parent POM作为⼀组module的聚合POM。在该POM中可以使⽤ 标签来定义⼀组⼦模块。parent POM不会有什么实际构建产出。⽽parent POM中的build配置以及依赖配置都会⾃动继承给⼦module。
2.4.3. ⼀致的项⽬结构
Ant时代⼤家创建Java项⽬⽬录时⽐较随意,然后通过Ant配置指定哪些属于source,那些属于testSource等。⽽Maven在设计之初的理念就是Conversion over configuration(约定⼤于配置)。其制定了⼀套项⽬⽬录结构作为标准的Java项⽬结构,解决不同ide 带来的⽂件⽬录不⼀致问题。
2.4.4. ⼀致的构建模型和插件机制
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.25</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <contextPath>/test</contextPath> </configuration> </plugin>
三、Maven的安装配置和⽬录结构
3.1. Maven的安装配置
3.1.1. 检查JDK的版本
JDK版本1.7及以上版本
3.1.2. 下载Maven
下载地址:http://maven.apache.org/download.html
3.1.3. 配置Maven环境变量
解压后把Maven的根⽬录配置到系统环境变量中MAVEN_HOME,将bin⽬录配置到path变量中。
注意:maven解压后存放的⽬录不要包含中⽂和空格
步骤:电脑 > 属性 > 高级系统设置 > 环境变量
Path里面添加:%MAVEN_HOME%
3.1.4. 检查Maven是否安装成功
打开dos窗⼝,执⾏ mvn -v
3.2. 认识Maven⽬录结构
Maven项⽬⽬录结构
任务:⼿动创建⼀个Maven项⽬,并编译运⾏成功
3.2.1. 创建⼀个⽂件夹作为项⽬的根⽬录
在根⽬录中创建⼀个pom.xml⽂件,内容如下
<?xml version="1.0" encoding="utf-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xxxx</groupId> <artifactId>maven01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>maven01</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
Ps:标签定义解释
根⽬录下的第⼀个⼦元素 ModelVersion指定当前Pom模型的版本,对于Maven3来说,它只能是4.0.0。 指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0 groupId定义了项⽬属于哪个组, 这个组往往和项⽬所在的组织和公司存在关联。 ⽐如: com.xxxx artifactId 定义了当前Maven项⽬在组中唯⼀的ID。 Version X.X.X-⾥程碑 ⽐如:1.0.0-SNAPSHOT 第⼀个X ⼤版本 有重⼤变⾰ 第⼆个X ⼩版本 修复bug,增加功能 3.2.2. 编写主函数 3.2.3. cmd 下编译并运⾏ cmd下⾯,进⼊项⽬的根⽬录 1. 编译java⽂件 mvn compile 2. 执⾏main ⽅法 mvn exec:java -Dexec.mainClass="com.xxxx.demo.Hello" 注:第⼀次下载会⽐较慢,要修改maven解压之后的conf⽬录下的settings.xml。 第三个X 更新 ⾥程碑版本: SNAPSHOT (快照,开发版) alpha(内部测试) beta(公开测试) Release | RC( 发布版) GA(正常版本) 使⽤name标签声明⼀个对于⽤户更为友好的项⽬名称,虽然不是必须的,但还是推荐为每个Pom声明 name,以⽅便信息交流。
3.2.2. 编写主函数
package com.xxxx.demo; public class Hello{ public static void main(String[] args) { System.out.println("hello maven"); } }
3.2.3. cmd 下编译并运⾏
1.修改默认仓库位置:打开maven⽬录 -> conf -> settings.xml
2.添加仓库位置配置
<localRepository>E:/maven/address</localRepository>
注:仓库位置改为⾃⼰本机的指定⽬录,"/"不要写反
3.更换阿⾥镜像,加快依赖下载
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
4.cmd下⾯,进⼊项⽬的根⽬录
编译java⽂件:mvn compile