Maven 自问自答

  • Maven 自问自答

    • maven有什么用
    • POM 是一个什么东西
    • 解读pom
    • Build Lifecycle
    • maven 三条指令运行web项目
    • maven常用指令
    • maven结构
    • maven快照版是什么
    • dependency中的scope含义
    • maven坐标是什么
    • version
    • Classifier
    • 定义version的版本
    • 多模块中统一一些依赖
    • 推荐学习链接

Apache Maven,作为一个项目管理和综合的工具,说起来很尴尬,一直以来,我都是把他当成一个依赖管理的工具而已,方便的地方就是我不用到处找jar包。同时,我还把他和IDE工具紧密的依赖在一起,每次都是用IDE工具去生成maven,这样看起来真的很糟糕,所以,写这篇自问自答来补全一下知识。

maven有什么用

maven作为一个项目构建和管理的工具,提供了帮助管理、构建、文档、报告、依赖、发布、分发的方法,可以方便的编译代码、进行依赖管理、管理二进制库等等,有利于项目过程的规范化、自动化、高效化、增强了可扩展性。

POM 是一个什么东西

project object model ,项目对象模型。pom中包含了项目的信息和maven build项目所需要的配置信息,通常有项目信息、依赖、插件、goal、build等等。pom是可以被继承的,因此有扩展性。

解读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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.chen</groupId><artifactId>my_spring_boot</artifactId><packaging>war</packaging><name>my_spring_boot Maven Webapp</name><url>http://maven.apache.org</url><!-- Inherit defaults from Spring Boot --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>0.5.0.BUILD-SNAPSHOT</version></parent><!-- Add typical dependencies for a web application --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!-- Package as an executable JAR --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><!-- Allow access to Spring milestones and snapshots --><!-- (you don't need this if you are using anything after 0.5.0.RELEASE) --><repositories><repository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><url>http://repo.spring.io/milestone</url><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url></pluginRepository><pluginRepository><id>spring-milestones</id><url>http://repo.spring.io/milestone</url></pluginRepository></pluginRepositories>
</project>

modelVersion:是object model版本,除非maven开发者升级版本,否则不需要修改。
groupId:指的是项目构建团体或组织唯一标识符,通常是域名倒写。
artifactId:指的是项目名。
package:指的是打包方式:jar、war、ear等等,默认jar。
version artifact:通常是0.0.1-SNAPSHOT,开发版。
name:maven文档中,目的展示名。
url:项目地址。
dependencies:依赖。
parent:父类的pom。
snapshot :快照仓库。
pluginRepositories:插件仓库。

Build Lifecycle

一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle。

maven 三条指令运行web项目

  1. mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=packageName -DartifactId=webappName
    示例:
    mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.chen.web -DartifactId=my_maven

  2. cd my_maven

  3. mvn tomcat:run -Dmaven.tomcat.port=8080

maven常用指令

mvn compile:编译源代码
mvn test-compile:编译测试代码
mvn clean:清空
mvn test:运行测试
mvn package:打包项目
mvn install:安装打包的jar到本地仓库
mvn clean package:清楚target再打包

maven结构

my-app
|--pom.xml
|--src|--main|--java|--com|--mycompany|--app|--App.java|--test|--java|--com|--mycompany|--app|--AppTest.java

maven快照版是什么

如果maven依赖都是release,那么每次更新以来都是要更换版本才能下载,这样就麻烦了,比如 你依赖的依赖是处于开发期中的,那么每次他修改一次代码(会很频繁),就要升级一次版本,所以maven2推出了snapshot快照仓库和release发布仓库。

dependency中的scope含义

maven打包的时候,是否进行打包。
-compile:默认范围
-provided:说明jdk或容器已经提供这依赖
-runtime:运行和测试需要,编译不需要
-test:测试需要
-system:和provided一样

maven坐标是什么

坐标就是maven构件的定位。比如说junit:junit:4.8.2表示的就是仓库中的路径/junit/junit/4.8.2/junit-4.8.2.pom和/junit/junit/4.8.2/junit-4.8.2.jar这个文件。

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope>
</dependency>

version

<主版本>.<次版本>.<增量版本>-<限定符>

Classifier

   <dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>JDK15</classifier></dependency>

定义version的版本

<dependency><groupId>org.springframework</groupId><artifactid>spring-beans</artifactId><version>2.5</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactid>spring-context</artifactId><version>2.5</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactid>spring-core</artifactId><version>2.5</version>
</dependency>

以上代码可改为

<properties><spring.version>2.5</spring.version>
</properties>
<depencencies><dependency><groupId>org.springframework</groupId><artifactid>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactid>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactid>spring-core</artifactId><version>${spring.version}</version></dependency>
</depencencies>

多模块中统一一些依赖

<dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactid>junit</artifactId><version>4.8.2</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactid>log4j</artifactId><version>1.2.16</version></dependency></dependencies>
</dependencyManagement>

子模块就可以简化成

<dependency><groupId>junit</groupId><artifactid>junit</artifactId></dependency><dependency><groupId>log4j</groupId><artifactid>log4j</artifactId></dependency>

推荐学习链接

maven实战

Maven 自问自答相关推荐

  1. 干货!JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  2. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  3. JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  4. 分享蔡澜老师的自问自答

    蔡澜老师的个人网站上有个「访问自己」的板块,里面记录了很多蔡澜老师的「自问自答」,问题和回答都很有趣,从中挑选了一部分.喜欢这种洒脱率真的生活态度. 附上网址 http://blog.sina.com ...

  5. Golang 数组的一些自问自答

    基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题 image-20211227100817481 所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题: ...

  6. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

  7. RT_Thread自问自答

    在看韦东山老师"RT-Thread内部机制"的视频,挺有意思的,有些概念的理解还是要深究一下,不然可能就是"我知道,这不就是那个....那个....那个",哪个 ...

  8. 自问自答:在VB中如何实现像C++一样printf的功能

    问: 每个整型都转换成5位的字符串,不足的在前面补0.比如:1转换成"00001",10转换成"00010".怎么实现? 答: format(1,"0 ...

  9. Java 疑问自问自答

    1.为什么把关闭资源放finally中? 答:保证即使前面发生一些异常情况也会最终正常执行finally中的代码,用于保证资源释放. 来源:https://bbs.csdn.net/topics/36 ...

最新文章

  1. Android之在BaseAdapter源码中了解观察者模式
  2. 给GridView中的buttonField添加一个删除确认功能
  3. 全球及中国血液透析行业发展规模与前景动态调研报告2022版
  4. matplotlib输出图形到网页_必学python库Matplotlib教程分享
  5. mongo数据库插入数据_深入研究Mongo数据库
  6. Windows防火墙添加80端口,解决apache无法访问的问题
  7. 浅谈Oracle执行计划
  8. android中页面跳转以及数据在Activity之间的传递
  9. 浅谈虚拟桌面上线推广的最佳时机
  10. 解决github下载及访问不稳定问题
  11. 连接摄像头拍照并识别图片中二维码
  12. cmd命令行常用指令
  13. 智课雅思词汇---十一、spect是什么意思
  14. 滚动加载分辨率scrollTop小数问题
  15. 2020南京市(徐庄)高层次创业人才引进计划开启申报
  16. 多重共线性的诊断与对策
  17. pdf合并的工具下载
  18. 访问网站php直接下载,访问php文件自动下载及502问题-Go语言中文社区
  19. python 阻止锁屏_想要自己的手机锁屏更加安全吗?python带你打造个性的锁屏控件...
  20. c 语言头文件seqlsit,2020-10-24 RNAseq 从fq开始分析全流程

热门文章

  1. 华为鸿蒙OS能取代安卓吗?
  2. UE4 Decal实现简介
  3. 5G步入规模化商用关键期
  4. 如何让新入职员工尽快融入集体,进入工作岗位
  5. [转][TFS] 禁止默认允许多人签出和强制解除签入签出锁
  6. 类似易企秀的UI框架 整屏滑动
  7. 哈罗单车确认完成新一轮几十亿融资 春华资本与蚂蚁金服领投
  8. C++一本通题库1012
  9. IOS 获取农历节日 节气
  10. iOS-申请邓白氏编码的超详细流程介绍