Maven知识梳理

本文主要记录Maven学习和使用中的知识点

1.MAVEN 概念

1.1 简介

Maven本质上是项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。主要服务于基于java平台的项目构建、依赖管理和项目信息管理。核心功能是合理的叙述项目间的依赖关系,通过pom.xml来自动获取jar包,用来运行定义在生命周期阶段内的插件和逻辑。

1.2 可以干什么

Maven可以帮忙完成项目开发过程中的几乎所有活动

  • 版本管理:
  • 工程构建
  • jar包管理
  • 代码编译
  • 自动化运行单元测试
  • 打包
  • 生成报表
  • 项目部署,生成web站点

1.3 工程结构

Maven的标准工程结构如下:

|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
|   `-- java(java源代码目录)
|   `-- resources(资源文件目录)
|-- test
        `-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
    |--classes(编译后的class文件存放处)

1.4 Maven 生命周期

Maven 对项目构建过程分为三套相互独立的生命周期,分别是:

  • Clean Lifecycle :在进行真正的构建之前进行一些清理工作;
  • Default Lifecycle :构建的核心部分,编译,测试,打包,部署等;
  • Site Lifecycle :生成项目报告,站点,发布站点;

1.5 Maven坐标规则

Maven使用如下几个要素来唯一定位某一产出物。

  • groudId:团体、组织的标识符,它以创建这个项目的组织名称的逆向域名开头,对应java包的结构,例如org.apache,必须定义;
  • artifactId:实际项目中的一个Maven项目(模块),推荐使用实际项目名称作为artifactId的前缀,不要包含点号(.),必须定义;
  • version:项目特定版本,如:1.0.0-,分别对应:主版本、此版本、增量版本、里程碑版本;
    • 主版本:表示项目的重大架构变化
    • 次版本:较大范围功能增加和变化,及bug修复
    • 增量版本:表示重大bug的修复,如果发现项目发布之后,出现影响功能的bug,及时修复,则应该是增量版本的变化
    • 里程碑版本:常见的有snapshot(快照版,稳定版本,开发过程中使用)、alpha(预览版,不向外部发布,测试人员使用)、beta(测试版,对外公开,这个阶段会增加一些新功能,在Alpha版之后推出)、release(正式版本)
  • packaging:项目类型,默认jar包,描述了项目打包后的输出。类型为JAR会产生一个jar包,类型为war会产生一个web应用;
  • classifier帮助定义构件输出的一些附属附件。注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的。

1.6 仓库的概念

仓库是指存放jar包的地方,主要分为:仓库分为:本地仓库,第三方仓库,中央仓库。

  • 本地仓库:用来存储从远程仓库或者中央仓库下载的插件和jar包,项目使用一些插件或jar包,可以通过设置修改;
  • 第三方仓库:内部中心仓库,又称为私服,一般由公司自己设立,只为本公司内部共享使用;
  • 中央仓库:在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2。这就是中央仓库,服务于整个互联网

获取jar包的过程:本地仓库>私服>中央仓库

1.7 常用命令

  • compile:compile是maven工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
    目录下;
  • test:test是maven工程的测试命令,会执行 src/test/java 下的单元测试类;
  • clean:clean是maven工程的清理命令,执行clean会删除target目录及其内容;
  • package:package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成 war包;
  • install:install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库

2 Maven配置

这里省去maven安装过程,安装过程可自行百度

2.1 IDEA设置

  • 配置安装目录即仓库地址

  • 设置maven在不联网的情况下使用本地插件
    添加参数-DarchetypeCatalog=internal

  • 配置settings.xml文件

    • 配置本地仓库地址
 <localRepository>E:\Tools\maven-repository</localRepository> 
 <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
  • 配置JDK版本
  <!-- java版本 --> 
  <profile>
  	  <id>jdk-1.8</id>
  	  <activation>
  		<activeByDefault>true</activeByDefault>
  		<jdk>1.8</jdk>
  	  </activation>

  	  <properties>
  		<maven.compiler.source>1.8</maven.compiler.source>
  		<maven.compiler.target>1.8</maven.compiler.target>
  		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  	  </properties>
  </profile>
  • 配置国内镜像源
<mirrors>
   <!-- 阿里云仓库 -->
 <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
  </mirror>
  <mirror>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2/</url>
      <mirrorOf>central</mirrorOf>
  </mirror>
  <mirror>
      <id>repo2</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://repo2.maven.org/maven2/</url>
  </mirror>
  <mirror>
      <id>ibiblio</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
  </mirror>
  <mirror>
      <id>jboss-public-repository-group</id>
      <mirrorOf>central</mirrorOf>
      <name>JBoss Public Repository Group</name>
      <url>http://repository.jboss.org/nexus/content/groups/public</url>
  </mirror>
  <mirror>
      <id>maven.net.cn</id>
      <name>oneof the central mirrors in china</name>
      <url>http://maven.net.cn/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
  </mirror>
  <mirror>
    <id>maven-default-http-blocker</id>
    <mirrorOf>external:http:*</mirrorOf>
    <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
    <url>http://0.0.0.0/</url>
    <blocked>true</blocked>
  </mirror>
</mirrors>

参考

posted @   偏执的感叹号  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩