02-Maven基本使用

nobility 发布于 2022-07-16 1269 次阅读


基本使用

创建Maven项目

  1. 在命令行中执行mvn archetype:generate命令,在3.0.5版本之前使用的是mvn archetype:create命令
  2. 会弹出提示使用的项目模板,输入项目模板编号即可
    • maven-archetype-quickstart:Mavan官方JavaSE模板(默认)
    • maven-archetype-webapp:Mavan官方JavaWeb模板
  3. 再次弹出提示输入,项目就会自动创建完成
    1. groupId:组织名
    2. artifactId:项目名
    3. version:版本号
    4. 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有以下三个标准的生命周期

  1. clean lifecycle:项目构建前清理,对应mvn clean命令
  2. default lifecycle:项目编译和打包,对应mvn compilemvn testmvn packagemvn installmvn deploy,执行后面的命令前面的命令就会自动执行因为同一个生命周期
  3. site lifecycle:项目报告、站点信息、项目发布,对应mvn site命令
此作者没有提供个人介绍
最后更新于 2022-07-16