Maven 自问自答
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项目
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_mavencd my_maven
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 自问自答相关推荐
- 干货!JAVA容器-自问自答学HashMap
前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- JAVA容器-自问自答学HashMap
前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...
- 分享蔡澜老师的自问自答
蔡澜老师的个人网站上有个「访问自己」的板块,里面记录了很多蔡澜老师的「自问自答」,问题和回答都很有趣,从中挑选了一部分.喜欢这种洒脱率真的生活态度. 附上网址 http://blog.sina.com ...
- Golang 数组的一些自问自答
基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题 image-20211227100817481 所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题: ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- RT_Thread自问自答
在看韦东山老师"RT-Thread内部机制"的视频,挺有意思的,有些概念的理解还是要深究一下,不然可能就是"我知道,这不就是那个....那个....那个",哪个 ...
- 自问自答:在VB中如何实现像C++一样printf的功能
问: 每个整型都转换成5位的字符串,不足的在前面补0.比如:1转换成"00001",10转换成"00010".怎么实现? 答: format(1,"0 ...
- Java 疑问自问自答
1.为什么把关闭资源放finally中? 答:保证即使前面发生一些异常情况也会最终正常执行finally中的代码,用于保证资源释放. 来源:https://bbs.csdn.net/topics/36 ...
最新文章
- Android之在BaseAdapter源码中了解观察者模式
- 给GridView中的buttonField添加一个删除确认功能
- 全球及中国血液透析行业发展规模与前景动态调研报告2022版
- matplotlib输出图形到网页_必学python库Matplotlib教程分享
- mongo数据库插入数据_深入研究Mongo数据库
- Windows防火墙添加80端口,解决apache无法访问的问题
- 浅谈Oracle执行计划
- android中页面跳转以及数据在Activity之间的传递
- 浅谈虚拟桌面上线推广的最佳时机
- 解决github下载及访问不稳定问题
- 连接摄像头拍照并识别图片中二维码
- cmd命令行常用指令
- 智课雅思词汇---十一、spect是什么意思
- 滚动加载分辨率scrollTop小数问题
- 2020南京市(徐庄)高层次创业人才引进计划开启申报
- 多重共线性的诊断与对策
- pdf合并的工具下载
- 访问网站php直接下载,访问php文件自动下载及502问题-Go语言中文社区
- python 阻止锁屏_想要自己的手机锁屏更加安全吗?python带你打造个性的锁屏控件...
- c 语言头文件seqlsit,2020-10-24 RNAseq 从fq开始分析全流程