Maven导图
2021-08-28 09:58:05 0 举报
AI智能生成
为你推荐
查看更多
Maven思维导图
作者其他创作
大纲/内容
在项目构建中,为了方便团队合作,解决模块间相互依赖和实时更新的问题,发布的临时版本就是快照版
快照版随着开发,会大量发布
SNAPSHOT(快照管理)
项目开发进入里程碑之后,向团队外部发布的较为稳定的版本,这种版本所对顶的额构建文件是稳定的
即便进行功能的后续开发,也不会改变当前发布的内容,这就是发布版本
RELEASE(发布版本)
快照版本是不稳定的,可能不是经过充分测试的,发布版本是稳定的
快照版本大部分是给公司内部使用或者新版本体验的,发布版是真正上线的版本
区别
版本管理
<主版本>.<次版本>.<增量版本>.<里程碑版本>
主版本:标识项目重大的架构变更,比如Spring4到Spring5的变更
次版本号:便是有较大的功能新增和变化,或者全面系统的修复漏洞
增量版本号:标识有重大的漏洞修复
里程碑版本:标识一个版本的里程碑,往往表示不是非常稳定的,还需要很多测试
例如:5.1.9.RELEASE
注意:并不是每个版本号都是这四部分,主版本号和次版本号都会声明,但是增量版本号和里程碑版本号就不一定了
工程版本号规定
自己的坐标信息和父项目信息parent
规定一些Maven项目中的公用的一些配置
maven内部已经定义好了很多的环境配置,可以直接访问
properties
多个环境下,会有多中配置,那个环境的配置生效。
这个可以使用profiles中的profiles定义多个版本的配置文件
哪一个版本生效,是由activation标签决定的
多版本控制
profiles
依赖版本控制,用来控制多个依赖的版本号控制
之后在dependency中声明的依赖可以不用指定具体的版本号
dependencymanagent
依赖注入,通过dependency注入多个依赖
dependencies
通过内部标签repository配置正式版上传地址
通过内部标签snapshotRepository配置快照版本上传地址
指定上传的私服地址
distributionManagement
repositories配置正常依赖的下载地址
pluginReposities配置插件依赖的下载地址
配置下载的仓库地址
repositories和pluginRepositories
在Idea项目中,默认只有src/resource下的静态文件才会被打包到classpath下,其他目录的静态文件不会被打包
如果需要打包,可以配置resources的静态资源打包规则,配置打包的目录,包含的或者排除的文件
resources资源加载配置
Maven的插件有很多,包含Maven的命令插件,和很多的打包,部署,编译,启动插件
<build> <plugins> <!-- maven 编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <encoding>UTF-8</encoding> <showWarnings>true</showWarnings> </configuration> </plugin> </plugins></build>
Maven编译插件
<build> <plugins> <!-- 源码打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.1</version> <!-- 进行package命令时就可以将源码同时进行打包 --> <!-- 所以我们需要绑定source插件到我们default生命周期的package阶段 --> <executions> <execution> <!-- 定义一个阶段,这个阶段是package --> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> </plugins></build>
源码打包
<properties> <!-- 管理jdk,编译jdk版本 --> <java.version>11</java.version> <!-- 启动类目录 --> <main-class>com.study.maven.newbee.NewbeeApplication</main-class> <!-- lib目录前缀 --> <classpathPrefix>app_lib/</classpathPrefix> <!-- 单独打包所有的依赖,放到指定目录 --> <outputDirectory>${project.basedir}/target/app_lib</outputDirectory> </properties><build> <plugins> <!-- maven依赖打包 jar包单独打出来 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!-- 项目编译目录target --> <outputDirectory>${outputDirectory}</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <!-- 生成jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <!-- lib目录前缀 --> <classpathPrefix>${classpathPrefix}</classpathPrefix> <!-- 启动类全限定类名 --> <mainClass>${main-class}</mainClass> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <!-- 把这些配置文件独立出去,静态文件,可以随时更改。如果是部署,可以排除。如果是打包到私服,不要排除,根据具体场景来定 --> <excludes> <exclude>public/**</exclude> <exclude>static/**</exclude> <exclude>*.xml</exclude> <exclude>*.yml</exclude> <exclude>*.properties</exclude> </excludes> </configuration> </plugin> </plugins></build>
生成jar包插件
<build> <plugins> <!-- 生成war包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.1</version> <configuration> <warSourceDirectory>webapp</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins></build>
生成war包插件
<build> <plugins> <!-- tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> <uriEncoding>UTF-8</uriEncoding> <server>tomcat7</server> </configuration> </plugin> </plugins></build>
tomcat插件
<properties> <spring-boot.version>2.5.3</spring-boot.version></properties><build> <plugins> <!-- springboot启动插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> </plugin> </plugins></build>
springboot启动插件
<!-- 跳过单元测试 --><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration></plugin>
Maven跳过测试插件
常用插件
plugins插件配置
build构建
3. pom文件内容介绍
清除target目录
clear
校验工程是否正确,所需信息是否完整
validate
编译,将项目编译到target目录
compile
测试,执行所有的测试案例
test
打包,将项目打包为jar包或者war包,放到target目录
package
检查,检查package是否有效,符合标准
verify
将package打包的jar包安装到本地仓库
install
将安装的本地仓库的jar包部署到私服
deploy
idea中的声明周期描述
4. Maven常用命令
Maven私服是本地仓库和中央仓库的桥梁
可以拉取中央仓库的内容,并且发布自己的资源到私服,共同管理
介绍
一般私服使用Nexus服务器管理
docker pull sonatype/nexus3:3.33.1docker run -d --privileged=true -p 8081:8081 --name nexus --restart=always sonatype/nexus3:3.33.1
可以配置路径映射:-v /docker/nexus/nexus-data/:/nexus-data/
可以配置jvm内存大小:-e INSTALL4J_ADD_VM_PARAMS=\"-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=1024m -Djava.util.prefs.userRoot=/some-other-dir\"
docker安装
docker exec -it nexus /bin/bashbash-4.4$ cat /opt/sonatype/sonatype-work/nexus3/admin.password
查看原密码
登录,修改密码
私服Docker安装
本地仓库,通常用来部署自己的jar包到此类型仓库
分为RELEASE版本和SNAPSHOT类型
hosted
代理仓库,通常用来代理中央,缓存中央仓库中的jar包
proxy
仓库组,整合多个hosted和proxy类型的仓库,实现同一暴露地址,实现私服有的从私服下载,私服没有的从中央仓库下载
group
私服仓库常用类型
Maven中央仓库,默认是官方网站https://repo1.maven.org/maven2/可以修改为阿里云的国内镜像
maven-ventral
私服发型版本jar
maven-release
私服快照版本jar
maven-snapshots
仓库分组,吧上面三个仓库组合在一起对外提供服务
maven-public
私服中自带的仓库
https://maven.aliyun.com/repository/public
修改中央仓库的地址
MyReleases,类型为maven2(hosted),release版本
MyReleases
MySnapshots,类型为maven2(hosted),snapshot版本
MySnapshots
MyProxy,类型为maven2(proxy),代理阿里云
MyProxy
MyGroup,类型为maven2(group),整合上面的三个参控股
MyGroup
可以自己创建一套自己的仓库
创建私服仓库
<servers> <server> <id>MyMaven</id> <username>admin</username> <password>admin123</password> </server></servers>
在server中配置私服密码
<mirrors> <mirror> <id>MyMaven</id> <mirrorOf>*</mirrorOf> <name>MyMaven</name> <url>http://192.168.10.31:8081/repository/maven-public/</url> </mirror></mirrors>
在mirrors中配置下载的私服仓库地址,为私服仓库组地址
Maven全局私服配置settings
<distributionManagement> <!-- 指定私服地址,发布的仓库地址,多个仓库根据仓库类型,自动上传到指定类型的仓库 --> <repository> <id>MyMaven</id> <name>MyMaven</name> <url>http://192.168.10.31:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>MyMaven</id> <name>MyMaven</name> <url>http://192.168.10.31:8081/repository/maven-snapshots/</url> </snapshotRepository></distributionManagement>
通过distributionManagement设置上传的私服地址
mvn deploy
上传jar包到私服
<!-- 配置远程仓库列表 --><repositories> <!-- 自定义的私服 --> <repository> <id>MyRelease</id> <name>MyRelease</name> <url>http://192.168.10.31:8081/repository/maven-public/</url> </repository></repositories><!-- 配置插件远程仓库列表 --><pluginRepositories> <!-- 自定义的私服 --> <pluginRepository> <id>MyRelease</id> <name>MyRelease</name> <url>http://192.168.10.31:8081/repository/maven-public/</url> </pluginRepository></pluginRepositories>
通过repositories和pluginrepositories配置下载的私服地址,如果全局配置过了,可以不用再配置
正常添加依赖,更新依赖即可
下载jar包从私服中
Idea上传下载私服的jar包
5. Maven私服的安装和使用
Maven是使用对象模型(POM)的概念,可以通过一小段信息来管理项目的构建、报告和文档的软件项目管理工具
在Maven中,每个项目都是一个对象,对象之间的关系,依赖、继承、聚合。Maven也实现了这些关系。使用Maven项目可以更加方便的管理jar包,项目拆分管理的效果
什么是Maven
提供标准的,跨平台的自动化构建项目的方式
项目构建
方便快捷的而管理项目中依赖的jar,避免资源见得班恩冲突问题
依赖管理
使用统一的开发结构,可以实现跨编辑器的代码开发
统一开发结构
Maven的作用
安装到本地的仓库
本地仓库
公司内部搭建的中转站
私服
公网上的开源仓库
中央仓库
远程仓库
Maven仓库类型
https://maven.apache.org/download.cgi
下载地址
maven命令地址
bin
存放一个jar包(plexus-classworlds),用于加载自己的类库
boot
配置文件地址settings
conf
第三方依赖
lib
目录结构
本地Maven安装
在localRepository中配置本地仓库位置
配置本地仓库存放位置
在mirrors中的mirror标签中配置国内仓库镜像,比如阿里云
配置国内仓库地址
在profiles配置jdk版本控制,通过activation的activebydefault配置是否默认激活
配置全局jdk版本控制
Maven初始配置
1. 介绍
逻辑工程,一般用作父工程或者聚合工程中,做jar包版本统一控制
POM
打包为jar包,使用java -jar运行
Jar
打包为war工程,发布到服务器上运行,比如tomcat
War
Maven工程类型
src/main/javasrc/main/resourcesrc/test/javasrc/test/resorucepom.xml
Maven项目结构
其实就是导jar包,把一个打为jar包的工程引入到本项目中中
在pom.xml中的dependencies标签中配置项目中需要导入的所有jar包
通过dependenciesManage中配置多个jar包的版本控制
导入jar包
也就是如果依赖一个工程,那么该工程导入的jar包会自动依赖过来,
在本项目的pom.xml中生命的jar包
直接依赖
依赖项目中导入的jar包
间接依赖
依赖传递
依赖的传递
就是解决jar包冲突问题的解决方案
对于间接依赖来说,jar包可达路径短的优先使用,也就是先找到的先用
最短路径优先原则
如果jar包的可达路径一致(在满足第一原则的基础上),还是冲突,那么就使用第二原则,最先声明原则,谁在pom.xml中先出现,谁先使用
最先声明原则
依赖的两个原则
上面的两个原则是自动排除冲突依赖的,也可以手动排除间接依赖,留下唯一一个版本,或者自己重新声明版本
说明
在dependency标签中的exclusions中定义排除的依赖,只需要groupId和artifactId即可,不需要版本号
使用
排除依赖
默认范围,编译、测试、运行时有效
典型代表,servlet
编译、测试有效,运行时无效。
provided
只有运行时有效
runtime
作用范围和provided一致,但是不是从maven仓库去获取jar包的,是从项目路径下加载jar包的,通过systemPath标注jar包所在的本地地址
system
仅测试时有效
只适用于pom文件中的dependencyManagent中,进行依赖版本限制
import
依赖的范围
依赖
本质上就是POM的继承
父项目只能是POM类型的
继承父项目POM中定义的所有声明
可以在父项目中统一管理jar包版本和公共资源
在子项目中使用parent标签管理父项目,父项目不知道有几个子项目
继承
聚合的前提是继承,拥有继承的所有特性
聚合就是一组项目,通过聚合放到一个父工程下,统一管理
子项目通过parent管理父工程,父工程中也可以通过modules管理所有的子工程
子项目可以是任意类型,多个子项目可以单独运行,部署
聚合
Maven工程关系
2. Maven项目的管理
Maven
0 条评论
回复 删除
下一页