基本使用
创建Maven项目
- 在命令行中执行
mvn archetype:generate
命令,在3.0.5版本之前使用的是mvn archetype:create
命令 - 会弹出提示使用的项目模板,输入项目模板编号即可
maven-archetype-quickstart
:Mavan官方JavaSE模板(默认)maven-archetype-webapp
:Mavan官方JavaWeb模板
- 再次弹出提示输入,项目就会自动创建完成
- groupId:组织名
- artifactId:项目名
- version:版本号
- package:项目包名(报错默认即可)
项目结构
|- src #目录是源代码和测试代码的根目录
| |- main #源代码根目录
| | |- java #源代码目录
| | |- resources #目录包含项目所需的资源,比如配置文件、图片等静态资源
| | |- webapp #javaWeb项目才有该目录,Web应用程序的根目录,其中有WEB-INF目录,WEB-INF中有web.xml文件
| |- test #测试代码的根目录
| | |- java #测试代码目录
| | |- resources #目录包含项目所需的测试资源
|- target #目录由Maven创建,包含所有编译的类,JAR、WAR等
| |- classes #编译后的类文件根目录
|- pom.xml #项目对象模型,依赖包对象管理器文件
pom.xml
依赖管理
maven官网可查找相关依赖,复制其中的Maven依赖配置粘贴到pom.xml的dependencies
标签中即可
<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> <!-- Maven模型版本,固定4.0.0-->
<groupId>...</groupId> <!--当前项目的组织名-->
<artifactId>...</artifactId> <!--当前项目的项目名-->
<version>1.0-SNAPSHOT</version> <!--当前项目的版本号-->
<packaging>jar</packaging> <!--项目打包类型,比如jar、war,默认是jar-->
<properties> <!--可在此标签内定义自定义版本变量,方便统一管理-->
<junit.version>3.8.1</junit.version>
</properties>
<dependencies> <!--当前项目的所有依赖-->
<dependency> <!--单个依赖使用dependency标签包裹,其中编写该依赖包的坐标以及依赖范围-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version> <!--使用时使用变量 ${} 进行包裹即可-->
<scope>test</scope>
</dependency>
</dependencies>
</project>
依赖范围
在依赖坐标中使用scope
标签标记该依赖的依赖范围,值可选以下5种:
compile
:编译范围,最大范围,也是默认范围,编译、运行、测试、打包都会使用provided
:供给范围,编译、运行时使用(比如servlet-api,打包时无需将其打包,因为Tomcat自带了servlet-api的包,打包后会和Tomcat中的冲突)runtime
:运行范围,运行、打包时使用(比如数据库连接驱动)test
:测试范围,测试时使用(比如Junit)system
:系统范围,编译、运行时使用(本地Jar包,一般不用)
依赖冲突
使用mvn dependency:tree
命令可查看当前项目的依赖树
- 直接依赖冲突:项目同时依赖两个包,这两个包又同时依赖第三个包,但是版本不一样,就会导致Maven同时导入两个版本不同的第三个包,一般情况下只需要保留较高版本的第三个包即可
- 传递依赖冲突:项目依赖一个包,这个包又依赖其他包,就会导致Maven同时导入其他包,但是改项目不需要其他包
可使用下面配置排除依赖
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<exclusions> <!--排除低版本依赖-->
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusions>
</dependency>
Maven命令
执行Maven命令必须保证当前目录有
pom.xml
文件
项目清理、编译、打包
命令 | 描述 |
---|---|
mvn clean |
清理编译打包目录target |
mvn compile |
将全部源代码文件编译到target 目录 |
mvn package |
将项目打包成JAR包或WAR包放入target 目录 |
项目运行、测试、发布
命名 | 描述 |
---|---|
mvn tomcat:run |
使用Maven内置的tomcat6插件运行JavaWeb项目 |
mvn test |
自动运行test 目录中测试用例程序,并生成测试报告 |
mvn site |
生成报表数据 |
mvn dependency:tree |
查看当前项目依赖树 |
mvn install |
将打包好的JAR包或WAR包发布到本地仓库 |
mvn deploy |
将打包好的JAR包或WAR包发布到中央仓库 |
Maven生命周期
Maven生命周期描述的是项目的整体构建过程,也就是说Maven项目的每个运行步骤都是由生命周期定义的,所有的命令操作方式都是一样的,从而降低了项目的管理难度,Maven有以下三个标准的生命周期
- clean lifecycle:项目构建前清理,对应
mvn clean
命令 - default lifecycle:项目编译和打包,对应
mvn compile
、mvn test
、mvn package
、mvn install
、mvn deploy
,执行后面的命令前面的命令就会自动执行因为同一个生命周期 - site lifecycle:项目报告、站点信息、项目发布,对应
mvn site
命令
Comments NOTHING