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