赞
踩
繁琐
冗余
、项目体积大
移植性差
项目从编译到运行的整个过程
完整的生命周期:清理缓存—校验—编译—测试—打包—安装—部署
Maven是一个
基于项目对象模型(POM)用于进行项目的依赖管理、生命周期管理的
工具软件
核心功能
依赖管理
生命周期管理
聚合工程
Maven是基于Java语言进行开发的,因此依赖JDK(建议JDK1.7+)
开箱即用:直接解压即可
MAVEN_HOME
D:\mvn\apache-maven-3.6.3
Path
增加 %MAVEN_HOME%\bin
测试 |
---|
使用Maven进行项目还有一个好处:无论使用什么样 的开发工具(eclipse/idea)项目的结构是统一的。
fmwy(项目名称)
--src
--main (存放项目的源文件)
--java (存放java代码,相当于传统项目中的src目录)
--resources (存放配置文件和静态资源的目录,相当于传统项目的web目录)
--test (存放项目的单元测试代码)
--java(测试代码)
--pom.xml
POM Project Object Model,Maven可以根据pom文件的配置对此项目进行依赖管理;也就是说项目中需要依赖,直接在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> <!--指定项目的标识:G 企业标识 A 项目标识 V 版本--> <groupId>com.qfedu</groupId> <artifactId>fmwy</artifactId> <version>1.0.0</version> <!--配置当前项目的依赖--> <dependencies> </dependencies> </project>
如果需要在当前项目中添加依赖,只需在pom.xml文件中进行依赖配置即可
配置依赖 找到依赖的坐标,添加dependencies标签即可
<!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
本地仓库
就是本地计算机上的某个文件夹(可以是自定义的任何文件夹)远程仓库
就是远程主机上的jar文件仓库
中央仓库
maven官方提供的仓库,包含了所需的一切依赖(免配置)公共仓库
除了中央仓库以外的第三方仓库都是公共仓库,例如aliyun(需要配置)私服
企业搭建的供内部使用的maven仓库maven仓库 |
---|
在maven_home/conf/settings.xml中进行配置
配置本地仓库
<localRepository>d:\repo</localRepository>
配置公共仓库
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
项目构建的声明周期:项目开发结束之后部署到运行环境运行的过程
- 清除缓存
不清除缓存会让项目用的是上一次编译后的内容
- 检查
项目结构,和基础语法的检查,有问题会导致编译不成功的
- 编译
编译成class文件
- 测试
(就会执行maven项目中test目录下的单元测试)
- 打包
(如果是web项目可能打包成war 、如果是普通的java项目打包成 jar)
- 安装 (jar会被安装到本地仓库)
- 部署 (将项目生成的包放到外部服务器中—私服仓库)
在项目的根目录下执行mvn指令(此目录下必须包含pom.xml)
mvn clean
mvn check
mvn compile
mvn test
mvn package
mvn install
mvn deploye
maven配置(other Settings 为以后的项目做设置) |
---|
说明:
IDEA本身集成了Maven,考虑到IDEA和Maven版本的兼容性,Idea不建议配置比默认版本更新的版本,建议使用idea自带的maven。
创建Java项目 |
---|
创建maven项目:maven-demo2
在pom.xml文件设置打包方式为war
<?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.qfedu</groupId>
<artifactId>maven-demo2</artifactId>
<version>1.0.0</version>
<!--设置项目打包方式为war-->
<packaging>war</packaging>
</project>
完成web项目结构(完善web项目结构)
新建一个webapp文件夹然后在maven下点击刷新即可webapp就有一个小蓝点
配置web组件—Tomcat
部署web项目
一个查找依赖坐标的网址
<?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.qfedu</groupId> <artifactId>maven-demo2</artifactId> <version>1.0.0</version> <!--设置项目打包方式为war--> <packaging>war</packaging> <dependencies> <!--在此位置配置项目中所需依赖的坐标 GAV--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version> <scope>provided</scope> </dependency> </dependencies> </project>
在通过dependency添加依赖时,可以通过
scope
标签配置当前依赖的适用范围
test 只在项目测试阶段引入当前依赖(编译、测试) 到test阶段
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
runtime 只在运行时使用(运行、测试运行)编译时没有,只在运行时
provided 在(编译、测试、运行)``
compile 在(编译、测试、运行、打包)都引入 整个阶段
clean 清理缓存 清理项目生成的缓存
validate 校验 验证项目需要是正确的(项目信息、依赖),不产生target缓存
compile 编译 编译项目专供的源代码,编译完成后会生成target缓存
compile产生的target缓存 |
---|
运行项目中的单元测试,会生成新的target缓存
test产生的target缓存 |
---|
将项目编译后的代码打包成发布格式, 会将上面的步骤依次执行一遍
package产生的target缓存 |
---|
生成maven-demo01-1.0-SNAPSHOT.war |
将这个war包直接放在tomcat就可以运行了 |
verify 检查 对集成测试的结果进行检查、确保项目的质量是达标的
install 安装 将包安装到maven的本地仓库, 以便在本地的其他项目中可以引用此项目(聚合工程)
将包安装到maven的本地仓库 |
---|
进行公开化,将包安装到私服的仓库,以供其他开发人员共享
可视化
终端指令 Terminal
选择项目名称—右键—Open in Terminal |
---|
企业搭建供内部使用的一个Maven仓库
- 开发者需要依赖直接从私服下载
- 私服可以实现企业内部依赖的共享:当企业开发了一个通用插件(jar),可以发布到私服,可以连接到当前私服的其他开发者就可以共享这个插件了
我们可以通过专门的Maven仓库管理软件来搭建私服。例如:Apache Archiva、Nexus
进入到nexus-2.14.11-01/bin
目录
管理员身份打开cmd命令行,执行指令
私服管理器登录地址: http://localhost:8081/nexus
连接仓库组(group)-->寻找依赖-->连接(hosted本地文件夹)寻找第一个文件夹(仓库)有没有,没有找到下一个文件加(hosted)-->都没有会找到(proxy)公共仓库,
对外暴露的proxy公共仓库,一般写道文件夹后面
servers
标签中<!--配置连接私服所需的帐号和密码-->
<server>
<id>nexus-public</id> <!-- nexus的认证id -->
<username>admin</username> <!--nexus中的用户名密码-->
<password>admin123</password>
</server>
profiles
标签中repository 和 pluginRepository的 id子标签的值,要和上面配置的server 的id子标签的值一致
<profile> <id>nexus</id> <repositories> <repository> <id>nexus-public</id> <name>Nexus Release Snapshot Repository</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus-public</id> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile>
activeProfiles
配置激活profile <activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
enabled>
true
nexus-public
http://localhost:8081/nexus/content/groups/public/
true
true
###### 7.2.3 在maven的settings.xml文件的`activeProfiles`配置激活profile
```xml
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
在国内访问Maven仓库,连接速度太慢。下面是将中央仓库替换成阿里云的中央仓库的方法。
可以直接修改Mavenconf文件夹中的setting.xml文件,或者在.m2文件夹下建立一个setting·xml文件。
setting.xml里面有个mirrors节点,用来配置镜像URL。mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性。
id是唯一标识一个mirror
name貌似没多大用,相当于描述
url是官方的库地址
mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。
mirror也不是按settings.xml中写的那样的顺序来查询的。所谓的第一个并不一定是最上面的那个。
当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。
在setting·xml中添加如下代码:
...
<mirrors>
...
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
直接在项目的pom.xml中修改中央库的地址。如下:
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
完整的pom
<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.xiaolyuh</groupId> <artifactId>spring-boot-student</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>spring-boot-student</name> <!-- 添加Spring Boot的父类依赖,这样当前项目就是Spring Boot项目了。 spring-boot-starter-parent是一个特殊的starter,他用来 提供相关的maven默认依赖, 使用它之后,常用的依赖可以省去version标签 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <repositories> <repository> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> </repositories> <!-- 或者在maven的setting文件中加入 --> <!--<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <modules> <module>spring-boot-student-banner</module> </modules> </project>
任何一个指令都有一个执行文件 |
---|
bin 存放指令文件(Maven提供了一个mvn指令) |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。