目录儿
一、Maven简介
- Maven是用java语言编写的。
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
- POM(Project Object Model):项目对象模型
- 统一开发结构:提供标准的、统一的项目结构
二、下载与安装
官网:maven.apache.org
选择安装包
环境配置
安装完成后,需要配置MAVEN_HOME环境变量
并把Maven
的bin
目录引用到Path
在命令提示符中输入mvn
检测是否配置成功
三、Maven基础概念
3.1 仓库
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
私服的作用:
1.保存具有版权的资源,包含购买或自主研发的jar(中央仓库中的jar都是开源的,不能存储具有版权的资源)
2.一定范围内共享资源,仅对内部开放,不对外共享
3.2 坐标
- 坐标用于描述仓库中资源的位置,是资源的唯一标识。
- Maven坐标主要组成部分
groupld
:定义当前Maven项目隶属 组织名称(id)
(通常是域名反写,例如:org.mybatis
)artifactld
:定义当前Maven 项目名称(id)
(通常是模块名称,例如CRM
、SMS
)version
:定义当前项目 版本号packaging
:定义该项目的打包方式
- Maven坐标的作用
- 定位资源位置,通过坐标可以将资源的识别与下载工作交由机器完成
在中央仓库网获取依赖坐标
中央仓库网址:https://mvnrepository.com
然后把坐标直接拷贝到项目pom.xml即可
3.3 本地仓库配置
- 进入自己的用户目录
最开始是没有仓库目录的(.m2
) - 创建
.m2
仓库目录
打开命令行,执行mvn
虽然目录创建好了,但是因为这里是C盘
,如果把资源放在这里会占用大量空间。因此我们需要在一个空间充足的地方创建一个仓库目录。 - 另外创建一个仓库目录如
D:\Maven\repository
用来存放资源。 - 打开
maven安装目录\conf\settings.xml
配置文件,添加本地仓库配置<localRepository>D:\maven\repository</localRepository>
3.4 远程仓库配置
远程仓库默认是maven的中央仓库,下载很慢
所以要修改成国内的镜像仓库,同样是打开maven安装目录\conf\settings.xml
配置文件
如修改成阿里云的镜像仓库
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 对哪种仓库进行镜像,简单说就是替代哪个仓库 -->
<mirrorof>central</mirrorof>
<!--镜像名称-->
<name>Nexus aliyun</name>
<!--镜像URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
以上配置都是全局配置。
四、手工创建一个Maven项目
4.1 搭建目录结构
Maven
规范中,普通JavaEE
项目目录结构如下:
Web
项目则比JavaEE
项目多了点东西
下面手动搭建一个
-
在D盘(或其他任意地方)创建一个
project
目录,用来存放项目
-
然后在
project
目录里面创建一个Maven项目目录project-java
,作为一个项目的根目录
-
项目目录下再创建源码目录
src
,用来存放源代码
-
源代码目录下创建主代码目录
main
和测试代码目录test
-
主代码目录
main
下创建java
目录和resources
资源目录
-
…\src\main\java\com\wipinfo
目录下创建一个
.java`文件,写上一个简单方法
package com.wipinfo; public class Demo{ public String say(String name){ System.out.println("hello " + name); return "hello " + name; } }
-
test
目录下创建一个java
目录和resources
测试资源目录
-
在
..\test\java\com\wipinfo
测试目录下创建Demo.java
的测试程序DemoTest.java
package com.wipinfo; import org junit.Test; import org.junit.Assert; public class DemoTest{ @Test public void testSay(){ Demo d = new Demo(); String ret = d.say("maven"); Assert.assertEquals("hello maven",ret); } }
到这里,基本结构已经创建好了,但还不完整。因为还差一个
Maven
项目的描述文件pom.xml
-
在
..\src\
中创建pom.xml
先去复制一份pom.xml
的格式,在maven安装目录\lib\
中有很多jar
包
任意打开一个
简单修改如下:<?xml version="1.0" encoding="UTF-8"?> <!-- 标准头 --> <!-- 根元素 project 表示一个maven project,里面包含了三项属性不用深究 --> <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"> <!-- 模型版本号,是 pom 对象模型的版本,而不是 maven 版本 --> <modelVersion>4.0.0</modelVersion> <!-- 组织、公司名称 --> <groupId>com.wipinfo</groupId> <!-- 项目名称 --> <artifactId>project-java</artifactId> <!-- 版本号 --> <version>1.0</version> <!-- 打包类型 --> <packaging>jar</packaging> <!-- 依赖坐标 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>
可能有些元素没有,比如
<packaging>
<version>
等自己加上。在项目目录下创建一个
pom.xml
文件(与src
目录同级),把内容复制进去保存
到这里,一个完整的maven
项目的目录结构就算搭建好了。
4.2 构建maven项目
4.2.1 项目构建指令
Maven项目构建命令:使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
mvn compile #编译
mvn clean #清理
mvn test #测试
mvn package #打包
mvn install #安装到本地仓库
注意:需要在命令提示符中进入项目
pom.xml
文件所在目录执行命令。
mvn compile
编译命令,把项目中的源代码文件编译成字节码文件,生成的字节码文件放在target
目录中。
此时进入项目目录会发现多个了target
目录
target
目录里面有用来存放字节码文件的classes
目录和存放maven状态记录文件的maven-status
目录
classes
目录里面装着编译好的.class
文件
mvn clean
清除命令,删除存放字节码的target
目录
mvn test
编译并执行项目里的单元测试
执行测试会在target
目录中生成两个新目录,其中一个是存放测试结果报告的。
测试报告有两份:
mvn package
打包指令,把项目打包成pom.xml
中<packaging>
指定的类型对应的文件。
在命令窗口可以看到,package
命令先执行了compile
和test
最后再打包
执行完后在target
目录多了两个东西
mvn install
安装指令,把打包好的项目放到本地仓库
执行前打开本地仓库是这样的
再看执行过程,和package
相比多了一步install
操作
执行完再看本地仓库,多了个目录
进去看会发现
4.3 使用插件创建maven工程
Maven
提供了插件,可以通过指令直接根据模板创建一个Maven
工程,不用自己创建目录结构这么麻烦。
基本指令格式:
mvn archetype:generate
-DgroupId=(project-packaging}
-DartifactId=(project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
如创建java
类型的maven
工程:
mvn archetype:generate /
-DgroupId=com.itheima /
-DartifactId=java-project /
-DarchetypeArtifactId=maven-archetype-quickstart /
-Dversion=1.0.0 /
-DinteractiveMode=false
如创建web
类型的maven
工程:
mvn archetype:generate /
-DgroupId=com.itheima /
-DartifactId=web-project /
-DarchetypeArtifactId=maven-archetype-webapp /
-Dversion=1.0.0 /
-DinteractiveMode=false /
用插件模板创建的工程可能会少一些东西,比如
java
工程少了resource
目录、多了一个Hello world
程序等,需要自己创建增删一下。
五、idea创建一个Maven工程
六、打包注意事项
参考官方文档:
生成可独立执行文档
Packaging an executable archive is performed by the repackage goal, as shown in the following example
是否打包成独立执行文档由repackage
这个设置决定:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Packaging Executable Archives:
The plugin can create executable archives (jar files and war files) that contain all of an application’s dependencies and can then be run with java -jar.
插件可以生成可执行.jar
或.war
文档, 其中包含所有应用依赖,并且直接通过java -jar
命令启动运行
If you are using spring-boot-starter-parent, such execution is already pre-configured with a repackage execution ID so that only the plugin definition should be added.
如果项目<parent>
是spring-boot-starter-parent
,那么就已经预先设置好了repackage
,只需要简单添加一下插件依赖就行:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
configuration常用设置项
skip
表示是否跳过repackage
的执行,添加了<skip>true</skip>
后将不会生成独立运行的jar包。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
testFailureIgnore
忽略测试单元测试中发生的错误
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
参考资料:哔哩哔哩 黑马程序员 黑马程序员Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven
https://www.bilibili.com/video/BV1Ah411S7ZE?share_source=copy_web