怎么做淘宝客网站,wordpress博客做seo,怎么在百度上注册店铺,工信网备案网站文章目录 1、什么是MAVEN2、Maven模型3、Maven仓库4、项目集成1_Idea集成Maven设置2_创建Maven项目3_POM配置详解4_maven 坐标详情5_Maven工程类型6_导入Maven项目 5、依赖管理1_依赖配置2_依赖传递3_可选依赖4_排除依赖4_可选依赖和排除依赖的区别5_依赖范围6_继承与聚合7_版本… 文章目录 1、什么是MAVEN2、Maven模型3、Maven仓库4、项目集成1_Idea集成Maven设置2_创建Maven项目3_POM配置详解4_maven 坐标详情5_Maven工程类型6_导入Maven项目 5、依赖管理1_依赖配置2_依赖传递3_可选依赖4_排除依赖4_可选依赖和排除依赖的区别5_依赖范围6_继承与聚合7_版本锁定8_自定义属性9_生命周期 6、分模块开发与设计1_引入2_分模块开发模块拆分 7、多环境配置与应用1_多环境配置作用2_多环境配置步骤 8、插件1_编译器插件2_资源拷贝插件3_tomcat插件 9、私服搭建1_私服介绍2_Nexus安装与启动3_私服资源操作流程分析4_私服仓库分类5_资源上传与下载 10、附录1_更新依赖索引2_版本管理3_清理maven仓库4_跳过测试了解 1、什么是MAVEN M a v e n Maven Maven 是 A p a c h e Apache Apache 旗下的一个开源项目是一款用于管理和构建项目的工具它基于项目对象模型(Project Object Model简称: POM) 的概念通过一小段描述信息来管理项目的构建、报告和文档。
官网https://maven.apache.org/ Apache 软件基金会成立于1999年7月是目前世界上最大的最受欢迎的开源软件基金会也是一个专门为支持开源项目而生的非盈利性组织。 开源项目https://www.apache.org/index.html#projects-list 使用 M a v e n Maven Maven 能够做什么呢
依赖管理统一项目结构项目构建
依赖管理
方便快捷的管理项目依赖的资源(jar包)避免版本冲突问题
当使用 m a v e n maven maven 进行项目依赖(jar包)管理则很方便的可以解决这个问题。
我们只需要在 m a v e n maven maven项目的pom.xml文件中添加一段如下图所示的配置即可实现。 统一项目结构 :
提供标准、统一的项目结构
在项目开发中当你使用不同的开发工具 (如 E c l i p s e Eclipse Eclipse、 I d e a Idea Idea)创建项目工程时会有自己的工程结构。
若我们创建的是一个 m a v e n maven maven工程是可以帮我们自动生成统一、标准的项目目录结构
具体的统一结构如下 目录说明 src/main/java: java源代码目录src/main/resources: 配置文件信息src/test/java: 测试代码src/test/resources: 测试配置文件信息 项目构建 : m a v e n maven maven 提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式 如上图所示我们开发了一套系统代码需要进行编译、测试、打包、发布这些操作如果需要反复进行就显得特别麻烦而 M a v e n Maven Maven提供了一套简单的命令来完成项目构建。 综上所述可以得到一个结论 M a v e n Maven Maven是一款管理和构建 j a v a java java项目的工具。
2、Maven模型
在 M a v e n Maven Maven 中每个项目都相当于是一个对象对象项目和对象项目之间是有关系的。
关系包含了依赖、继承、聚合实现 M a v e n Maven Maven 项目可以更加方便的实现导jar包、拆分项目等效果。
项目对象模型 (Project Object Model)依赖管理模型(Dependency)构建生命周期/阶段(Build lifecycle phases)
1). 构建生命周期/阶段(Build lifecycle phases) 以上图中紫色框起来的部分就是用来完成标准化构建流程 。
当我们需要编译 M a v e n Maven Maven 提供了一个编译插件供我们使用当我们需要打包 M a v e n Maven Maven 就提供了一个打包插件供我们使用等。
2). 项目对象模型 (Project Object Model) 以上图中紫色框起来的部分属于项目对象模型就是将我们自己的项目抽象成一个对象模型有自己专属的坐标如下图所示是一个 M a v e n Maven Maven项目 坐标就是资源(jar包)的唯一标识通过坐标可以定位到所需资源(jar包)位置 3). 依赖管理模型(Dependency) 以上图中紫色框起来的部分属于依赖管理模型是使用坐标来描述当前项目依赖哪些第三方jar包
之前我们项目中需要jar包时直接就把jar包复制到项目下的lib目录而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢 答案 M a v e n Maven Maven 仓库 3、Maven仓库
仓库 M a v e n Maven Maven仓库是基于简单文件系统存储的集中化管理 J a v a A P I Java API JavaAPI资源构件的一个服务。 M a v e n Maven Maven 可以在某个位置统一存储所有的 M a v e n Maven Maven 项目共享的构件这个统一的位置就是仓库项目构建完毕后生成的构件也可以安装或者部署到仓库中供其它项目使用。
仓库中的任何一个构件都有其唯一的坐标根据这个坐标可以定义其在仓库中的唯一存储路径。 仓库的本质就是一个目录(文件夹)这个目录被用来存储开发中所有依赖(就是jar包)和插件 得益于 M a v e n Maven Maven 的坐标机制任何 M a v e n Maven Maven项目使用任何一个构件的方式都是完全相同的。 M a v e n Maven Maven 仓库分为 本地仓库 自己计算机上的一个目录(用来存储jar包)。 中央仓库 由 M a v e n Maven Maven 团队维护的全球唯一的仓库地址https://mvnrepository.com/。 远程仓库(私服) 一般由公司团队搭建的私有仓库。 当项目中使用坐标引入对应依赖jar包后首先会查找本地仓库中是否有对应的jar包 如果有则在项目直接引用 如果没有则去中央仓库中下载对应的jar包到本地仓库
如果搭建远程仓库(私服)可以将jar包的查找顺序则变为本地仓库 -- 远程仓库– 中央仓库 下载地址 https://maven.apache.org/download.cgi。
配置流程 解压安装 建议解压到没有中文、特殊字符的路径下。 解压缩后的目录结构如下 bin目录 存放的是可执行命令。mvn 命令重点关注conf目录 存放Maven的配置文件。settings.xml配置文件后期需要修改lib目录 存放Maven依赖的jar包。 M a v e n Maven Maven 也是使用 j a v a java java开发的所以它也依赖其他的jar包 配置仓库 在自己计算机上新一个目录本地仓库用来存储jar包 打开conf/settings.xml文件: 本地仓库 ?xml version1.0 encodingUTF-8?
settings xmlnshttp://maven.apache.org/SETTINGS/1.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd!-- 本地仓库配置 --localRepository具体本地仓库位置/localRepository!-- 省略具体信息参考后续内容。 --
/settings远程镜像仓库 mirror !-- 指定镜像ID可自己改名 --idalimaven/id !-- 匹配中央仓库阿里云的仓库名称不可以自己起名必须这么写--mirrorOfcentral/mirrorOf!-- 指定镜像名称可自己改名 -- nameMaven aliyun/name !-- 指定镜像路径镜像地址 --urlhttp://maven.aliyun.com/nexus/content/groups/public/url
/mirror注: 只可配置一个(另一个要注释!) 不然两个可能发生冲突导致jar包无法下载!!! 配置 M a v e n Maven Maven环境变量 M a v e n Maven Maven环境变量的配置类似于 J D K JDK JDK环境变量配置一样 1). 在系统变量处新建一个变量MAVEN_HOME MAVEN_HOME 环境变量的值设置为 m a v e n maven maven 的解压安装目录 2). 在Path中进行配置 PATH环境变量的值设置为%MAVEN_HOME%\bin 3). 打开DOS命令提示符进行验证出现如图所示表示安装成功 mvn -v4、项目集成
1_Idea集成Maven设置 Maven home path 指定当前 M a v e n Maven Maven的安装目录 User settings file 指定当前 M a v e n Maven Maven的settings.xml配置文件的存放路径 Local repository 指定 M a v e n Maven Maven 的本地仓库的路径 (如果指定了settings.xml这个目录会自动读取出来可以不用手动指定) 上述配置的 m a v e n maven maven环境如果在项目中配置只是针对于当前工程的如果我们再创建一个project又恢复成默认的配置了。 要解决这个问题 我们就需要配置全局的 m a v e n maven maven环境。
进入到IDEA欢迎页面打开 All settings选择 Build,Execution,Deployment Build Tools Maven 这里所设置的 m a v e n maven maven的环境信息并未指定任何一个 project此时设置的信息就属于全局配置信息。
以后我们再创建 project默认就是使用我们全局配置的信息。
2_创建Maven项目
1、创建一个空项目 2、创建模块选择 M a v e n Maven Maven点击Next。 3、填写模块名称坐标信息点击create创建完成。 M a v e n Maven Maven 项目的目录结构: project-maven |— src (源代码目录和测试代码目录) |— main (源代码目录) |— java (源代码java文件目录) |— resources (源代码配置文件目录) |— test (测试代码目录) |— java (测试代码java目录) |— resources (测试代码配置文件目录) |— target (编译、打包生成文件存放目录) 4、编写 HelloWorld并运行
public class HelloWorld {public static void main(String[] args) {System.out.println(Hello Maven ...);}
}3_POM配置详解 P O M POM POM (Project Object Model) 指的是项目对象模型用来描述当前的maven项目。
使用pom.xml文件来实现
pom.xml文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd!-- POM模型版本 --modelVersion4.0.0/modelVersion!-- 当前项目坐标 --groupIdcom.example/groupIdartifactIdmaven_project1/artifactIdversion1.0-SNAPSHOT/version!-- 打包方式 --packagingjar/packaging/projectpom文件详解
project p o m pom pom文件的根标签表示当前 m a v e n maven maven项目modelVersion 声明项目描述遵循哪一个 P O M POM POM 模型版本 虽然模型本身的版本很少改变但它仍然是必不可少的(目前 P O M POM POM 模型版本是4.0.0)。 坐标 groupId、artifactId、version 定位项目在本地仓库中的位置由以上三个标签组成一个坐标 packaging maven项目的打包方式通常设置为jar或war默认值jar
4_maven 坐标详情
什么是坐标 M a v e n Maven Maven 中的坐标是资源的唯一标识通过该坐标可以唯一定位资源位置使用坐标来定义项目或引入项目中需要的依赖 M a v e n Maven Maven坐标主要组成
groupId定义当前 M a v e n Maven Maven项目隶属组织名称通常是域名反写例如com.githubartifactId定义当前 M a v e n Maven Maven项目名称通常是模块名称例如 order-service、goods-serviceversion定义当前项目版本号 1.0-SNAPSHOT (快照版)
注意
上面所说的资源可以是插件、依赖、当前项目。我们的项目如果被其他的项目依赖时也是需要坐标来引入的。
5_Maven工程类型
1、POM工程
POM工程是逻辑工程。用在父级工程或聚合工程中。用来做jar包的版本控制。
2、JAR工程
将会打包成jar用作jar包使用。即常见的本地工程 — Java Project。
3、WAR工程
将会打包成war发布在服务器上的工程。
6_导入Maven项目
方式1使用Maven面板快速导入项目
打开IDEA选择右侧 M a v e n Maven Maven 面板点击 号选中对应项目的pom.xml文件双击即可 说明如果没有 M a v e n Maven Maven 面板选择 View Appearance Tool Window Bars。 方式2使用idea导入模块项目
File Project Structure Modules Import Module 找到要导入工程的pom.xml。 5、依赖管理
1_依赖配置
依赖指当前项目运行所需要的jar包。一个项目中可以引入多个依赖
例如在当前工程中我们需要用到logback来记录日志此时就可以在 m a v e n maven maven工程的pom.xml文件中引入logback 的依赖。具体步骤如下 在pom.xml中编写dependencies标签 在dependencies标签中使用dependency引入坐标 定义坐标的 groupId、artifactId、version
dependencies!-- 第1个依赖 : logback --dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.11/version/dependency!-- 第2个依赖 : junit --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency
/dependencies点击刷新按钮引入最新加入的坐标 刷新依赖保证每一次引入新的依赖或者修改现有的依赖配置都可以加入最新的坐标 注意事项 如果引入的依赖在本地仓库中不存在将会连接远程仓库 / 中央仓库然后下载依赖这个过程会比较耗时耐心等待如果不知道依赖的坐标信息可以到mvn的中央仓库中搜索 添加依赖的几种方式 利用中央仓库搜索的依赖坐标 利用IDEA工具搜索依赖 熟练上手 m a v e n maven maven后快速导入依赖
2_依赖传递
早期我们没有使用 m a v e n maven maven时向项目中添加依赖的jar包需要把所有的jar包都复制到项目工程下。
需要logback-classic时由于logback-classic又依赖了logback-core和slf4j所以必须把这3个jar包全部复制到项目工程下。
我们现在使用了 m a v e n maven maven当项目中需要使用logback-classic时只需要在pom.xml配置文件中添加logback-classic的依赖坐标即可。 在pom.xml文件中只添加了logback-classic依赖但由于maven的依赖具有传递性所以会自动把所依赖的其他jar包也一起导入。
传递性依赖是Maven2.0的特性。
假设你的项目依赖于一个库而这个库又依赖于其他库。
你不必自己去找出所有这些依赖你只需要加上你直接依赖的库 M a v e n Maven Maven会隐式的把这些库间接依赖的库也加入到你的项目中。
这个特性是靠解析从远程仓库中获取的依赖库的项目文件实现的。
一般的这些项目的所有依赖都会加入到项目中或者从父项目继承或者通过传递性依赖。
如果A依赖了B那么C依赖A时会自动把A和B都导入进来。 依赖传递可以分为 直接依赖 在当前项目中通过依赖配置建立的依赖关系 间接依赖 被依赖的资源如果依赖其他资源当前项目间接依赖其他资源 比如以上图中
projectA依赖了projectB。对于projectA 来说projectB 就是直接依赖。而projectB依赖了projectC及其他jar包。 那么此时在projectA中也会将projectC的依赖传递下来。对于projectA 来说projectC就是间接依赖。
3_可选依赖
A依赖BB依赖C如果A不想将C依赖进来是否可以做到
可选依赖指对外隐藏当前所依赖的资源————不透明。
dependencygroupIdcom.example/groupIdartifactIdmaven_pojo/artifactIdversion1.0-SNAPSHOT/version!--可选依赖是隐藏当前工程所依赖的资源隐藏后对应资源将不具有依赖传递性--optionalfalse/optional
/dependency4_排除依赖
问题之前我们讲了依赖具有传递性。那么A依赖BB依赖C如果A不想将C依赖进来是否可以做到
答案在 m a v e n maven maven项目中我们可以通过排除依赖来实现。
什么是排除依赖
排除依赖指主动断开依赖的资源。被排除的资源无需指定版本dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.5.6/version!--排除依赖, 主动断开依赖的资源--exclusionsexclusiongroupIdch.qos.logback/groupIdartifactIdlogback-core/artifactId/exclusion/exclusions
/dependency依赖排除示例
使用之前 排除了logback-classic所依赖的logback-core。
exclusions 用来排除传递性依赖 其中可配置多个exclusion标签每个exclusion标签里面对应的有groupIdartifactIdversion三项基本元素。注意不用写版本号。
4_可选依赖和排除依赖的区别 5_依赖范围
在项目中导入依赖的jar包后默认情况下可以在任何地方使用。
如果希望限制依赖的使用范围可以通过scope标签设置其作用范围。
作用范围 主程序范围有效main 文件夹范围内 测试程序范围有效test 文件夹范围内 是否参与打包运行package 指令范围内
scope 标签的取值范围
scope值主程序测试程序打包运行范例compile默认YYYlog4jtest-Y-junitprovidedYY-servlet-apiruntime-YYjdbc 驱动systemY--本地系统库import---BOM (Bill of Materials)annotationYYYLombok
说明
❀compile这是默认范围。如果没有指定就会使用该依赖范围。表示该依赖在编译和运行时都生效。
❀provided已提供依赖范围。使用此依赖范围的 M a v e n Maven Maven依赖。典型的例子是servlet-api编译和测试项目的时候需要该依赖但在运行项目的时候由于容器已经提供就不需要 M a v e n Maven Maven重复地引入一遍(如servlet-api)
❀runtimeruntime 范围表明编译时不需要生效而只在运行时生效。典型的例子是 J D B C JDBC JDBC驱动实现项目主代码的编译只需要 J D K JDK JDK提供的 J D B C JDBC JDBC接口只有在执行测试或者运行项目的时候才需要实现上述接口的具体 J D B C JDBC JDBC驱动。
❀system系统范围与provided类似不过你必须显式指定一个本地系统路径的JAR此类依赖应该一直有效 M a v e n Maven Maven 也不会去仓库中寻找它。但是使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。
❀testtest范围表明使用此依赖范围的依赖只在编译测试代码和运行测试的时候需要应用的正常运行不需要此类依赖。典型的例子就是JUnit它只有在编译测试代码及运行测试的时候才需要。Junit的jar包就在测试阶段用就行了你导出项目的时候没有必要把junit的东西到处去了就所在在junit坐标下加入scope-test
❀Importimport范围只适用于pom文件中的dependencyManagement部分。表明指定的 P O M POM POM 必须使用dependencyManagement部分的依赖。注意import只能用在dependencyManagement的scope里。
6_继承与聚合
继承关系
如果A工程继承B工程则代表A工程默认依赖B工程依赖的所有资源且可以应用B工程中定义的所有资源信息。
被继承的工程B工程只能是 P O M POM POM工程(建议父工程打包方式设置为 p o m pom pom)。
packagingpom/packaging在父工程的 p o m pom pom文件中配置依赖关系子工程将沿用父工程中的依赖关系
dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.10.RELEASE/version/dependency……
/dependencies配置子工程中可选的依赖关系
dependencyManagementdependenciesdependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.16/version/dependency……/dependencies
/dependencyManagement在子工程中配置当前工程所继承的父工程
!--定义该工程的父工程--
parentgroupIdcom.example/groupIdartifactIdmaven_parent/artifactIdversion1.0-SNAPSHOT/version!--填写父工程的pom文件根据实际情况填写--relativePath../maven_parent/pom.xml/relativePath
/parent在子工程中配置使用父工程中可选依赖的坐标
dependenciesdependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactId/dependency
/dependencies注意 在父项目中放在dependencyManagement中的内容时不被子项目继承不可以直接使用。 放在dependencyManagement中的内容主要目的是进行版本管理。 里面的内容在子项目中依赖时坐标只需要填写group id和artifact id即可注意如果子项目不希望使用父项目的版本可以明确配置version。 子工程中还可以定义父工程中没有定义的依赖关系
作用
简化配置减少版本冲突
聚合关系
当我们开发的工程拥有2个以上模块的时候每个模块都是一个独立的功能集合。
比如某大学系统中拥有搜索平台学习平台考试平台等。
开发的时候每个平台都可以独立编译测试运行。这个时候我们就需要一个聚合工程。
在创建聚合工程的过程中总的工程必须是一个 P O M POM POM工程Maven Project聚合项目必须是一个pom类型的项目jar项目、war项目是没有办法做聚合工程的各子模块可以是任意类型模块Maven Module。
packagingpom/packaging前提继承。
聚合包含了继承的特性。
聚合时多个项目的本质还是一个项目这些项目被一个大的父项目包含且这时父项目类型为 p o m pom pom类型。
同时在父项目的pom.xml中出现modules表示包含的所有子模块。
modulesmodule../maven_entity/modulemodule../maven_pojo/modulemodule../maven_dao/module
/modules总项目一般总项目 P O M POM POM 项目。 聚合工程通常是一个不具有业务功能的”空“工程有且仅有一个 p o m pom pom文件 作用使用聚合工程可以将多个工程编组通过对聚合工程进行构建实现对所包含的模块进行同步构建 当工程中某个模块发生更新变更时必须保障工程中与已更新模块关联的模块同步更新此时可以使用聚合工程来解决批量模块同步构建的问题
聚合和继承的作用
作用 聚合用于快速构建项目继承用于快速配置 相同点 聚合与继承的pom.xml文件打包方式均为 p o m pom pom可以将两种关系制作到同一个 p o m pom pom文件中聚合与继承均属于设计型模块并无实际的模块内容 不同点 聚合是在当前模块中配置关系聚合可以感知到参与聚合的模块有哪些继承是在子模块中配置关系父模块无法感知哪些子模块继承了自己
7_版本锁定
如果项目中各个模块中都公共的这部分依赖我们可以直接定义在父工程中从而简化子工程的配置。 然而在项目开发中还有一部分依赖并不是各个模块都共有的可能只是其中的一小部分模块中使用到了这个依赖。
而由于是一个项目中的多个模块那多个模块中我们要使用的同一个依赖的版本要一致这样便于项目依赖的统一管理。比如这个jwt依赖我们多个模块都使用的是 0.9.1 这个版本。
那假如说我们项目要升级要使用到jwt最新版本 0.9.2 中的一个新功能那此时需要将依赖的版本升级到0.9.2那此时该怎么做呢
第一步去找当前项目中所有的模块的pom.xml配置文件看哪些模块用到了jwt的依赖。
第二步找到这个依赖之后将其版本version更换为 0.9.2。
问题如果项目拆分的模块比较多每一次更换版本我们都得找到这个项目中的每一个模块一个一个的更改。 很容易就会出现遗漏掉一个模块忘记更换版本的情况。
那我们又该如何来解决这个问题如何来统一管理各个依赖的版本呢
答案 M a v e n Maven Maven 的版本锁定功能。
在 m a v e n maven maven中可以在父工程的 p o m pom pom文件中通过 dependencyManagement 来统一管理依赖版本。
父工程
!--统一管理依赖版本--
dependencyManagementdependencies!--JWT令牌--dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency/dependencies
/dependencyManagement子工程
dependencies!--JWT令牌--dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId/dependency
/dependencies注意 在父工程中所配置的 dependencyManagement 只能统一管理依赖版本并不会将这个依赖直接引入进来。 这点和 dependencies 是不同的。 子工程要使用这个依赖还是需要引入的只是此时就无需指定 version 版本号了父工程统一管理。变更依赖版本只需在父工程中统一变更。 8_自定义属性
我们也可以通过自定义属性及属性引用的形式在父工程中将依赖的版本号进行集中管理维护。 具体语法为
①定义属性
propertieslombok.version1.18.24/lombok.version
/properties②引用属性
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version
/dependency接下来我们就可以在父工程中将所有的版本号都集中管理维护起来。
版本集中管理之后我们要想修改依赖的版本就只需要在父工程中自定义属性的位置修改对应的属性值即可。
资源文件引用属性
①定义属性
!--定义自定义属性--
propertiesspring.version5.2.10.RELEASE/spring.versionjunit.version4.12/junit.versionjdbc.urljdbc:mysql://127.0.0.1:3306/ssm_db/jdbc.url
/properties②配置文件中引用属性
jdbc.drivercom.mysql.jdbc.Driver
jdbc.url${jdbc.url}
jdbc.usernameroot
jdbc.passwordroot③开启资源文件目录加载属性的过滤器
buildresourcesresourcedirectory${project.basedir}/src/main/resources/directoryfilteringtrue/filtering/resource/resources
/build④配置 m a v e n maven maven打 w a r war war包时忽略web.xml检查
plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-war-plugin/artifactIdversion3.2.3/versionconfigurationfailOnMissingWebXmlfalse/failOnMissingWebXml/configuration
/plugin其他属性了解
属性列表 自定义属性常用内置属性Setting属性Java系统属性环境变量属性
属性分类引用格式示例自定义属性${自定义属性名}${spring.version}内置属性${内置属性名}${basedir} ${version}Setting属性${setting.属性名}${settings.localRepository}Java系统属性${系统属性分类.系统属性名}${user.home}环境变量属性${env.环境变量属性名}${env.JAVA_HOME}
9_生命周期 M a v e n Maven Maven 的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建经历哪些阶段。
在 M a v e n Maven Maven出现之前项目构建的生命周期就已经存在软件开发人员每天都在对项目进行清理编译测试及部署。虽然大家都在不停地做构建工作但公司和公司间、项目和项目间往往使用不同的方式做类似的工作。 M a v e n Maven Maven从大量项目和构建工具中学习和反思然后总结了一套高度完美的易扩展的项目构建生命周期。这个生命周期包含了项目的清理初始化编译测试打包集成测试验证部署和站点生成等几乎所有构建步骤。 M a v e n Maven Maven对项目构建的生命周期划分为3套相互独立 clean 清理工作。 default 核心工作。如编译、测试、打包、安装、部署等。 site 生成报告、发布站点等。
三套生命周期又包含哪些具体的阶段呢 我们来看下面这幅图: 我们看到这三套生命周期里面有很多很多的阶段这么多生命周期阶段其实我们常用的并不多主要关注以下几个 clean 移除上一次构建生成的文件 compile 编译项目源代码javac命令。 test 使用合适的单元测试框架运行测试(junit) package 将编译后的文件打包如jar、war等 install 包含编译打包安装项目到本地仓库 M a v e n Maven Maven 的生命周期是抽象的这意味着生命周期本身不做任何实际工作在Maven的设计中实际任务如源代码编译都交由插件来完成。 IDEA工具为了方便程序员使用 m a v e n maven maven生命周期在右侧的 m a v e n maven maven工具栏中已给出快速访问通道 生命周期的顺序是clean -- validate -- compile -- test -- package -- verify -- install -- site -- deploy
我们需要关注的就是clean -- compile -- test -- package -- install 说明在同一套生命周期中我们在执行后面的生命周期时前面的生命周期都会执行。 思考当运行package生命周期时clean、compile生命周期会不会运行 clean不会运行compile会运行。 因为compile与package属于同一套生命周期而clean与package不属于同一套生命周期。 在日常开发中当我们要执行指定的生命周期时有两种执行方式
在idea工具右侧的 m a v e n maven maven工具栏中选择对应的生命周期双击执行在DOS命令行中通过 m a v e n maven maven命令执行
方式一在idea中执行生命周期 选择对应的生命周期双击执行
方式二在命令行中执行生命周期
进入到DOS命令行 6、分模块开发与设计
1_引入
问题导入
分模块开发对工程有什么好处
模块拆分原则
目的项目的扩展性变强了方便其他项目引用相同的功能。 将原始模块按照功能拆分成若干个子模块方便模块间的相互调用、接口共享项目的管理维护、拓展。
2_分模块开发模块拆分
问题导入
一个完整的工程依据什么来进行模块的拆分 创建 M a v e n Maven Maven模块 书写模块代码 注意事项 分模块开发需要先针对模块功能进行设计再进行编码。不会先将工程开发完毕然后进行拆分 通过 m a v e n maven maven指令安装模块到本地仓库 i n s t a l l install install指令 mvn install注意事项 团队内部开发需要发布模块功能到团队内部可共享的仓库中私服 7、多环境配置与应用
1_多环境配置作用
问题导入
多环境配置有什么好处 m a v e n maven maven提供配置多种环境的设定帮助开发者使用过程中快速切换环境 2_多环境配置步骤
1.定义多环境
!--定义多环境--
profiles!--定义具体的环境生产环境--profile!--定义环境对应的唯一名称--idenv_dep/id!--定义环境中专用的属性值--propertiesjdbc.urljdbc:mysql://127.0.0.1:3306/ssm_db/jdbc.url/properties!--设置默认启动--activationactiveByDefaulttrue/activeByDefault/activation/profile!--定义具体的环境开发环境--profileidenv_pro/id……/profile
/profiles2.使用多环境构建过程
【命令格式】mvn 指令 –P 环境定义id。
【范例】
mvn install –P env_pro8、插件
1_编译器插件
通过编译器插件我们可以配置使用的 J D K JDK JDK或者编译器的版本
1、settings.xml文件中配置全局编译器插件 找到profiles节点在里面加入profile节点
profile!-- 定义的编译器插件ID全局唯一名字随便起 --idjdk-1.8/id!-- 插件标记activeByDefault true默认编译器jdk提供编译器版本 --activationactiveByDefaulttrue/activeByDefaultjdk1.8/jdk/activation!-- 配置信息source-源信息target-字节码信息compilerVersion-编译过程版本 --propertiesmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetmaven.compiler.compilerVersion1.8/maven.compiler.compilerVersion/properties
/profile2、配置编译器插件pom.xml配置片段
!-- 配置maven的编译插件 --
buildplugins!--JDK编译插件 --plugin!--插件坐标 --groupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.2/version!-- --configuration!-- 源代码使用JDK版本--source1.7/source!-- 源代码编译为class文件的版本要保持跟上面版本一致--target1.7/targetencodingUTF-8/encoding/configuration/plugin/plugins
/build2_资源拷贝插件 M a v e n Maven Maven 在打包时默认只将src/main/resources里的配置文件拷贝到项目中并做打包处理而非resource目录下的配置文件在打包时不会添加到项目中。
我们的配置文件一般都放在src/main/resources。
然后打包后配置文件就会在target的classes下面放着
测试 我现在想把非resources下面的文件也打包到classes下面
需要配置
pom.xml配置片段
buildresourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.xml/includeinclude**/*.properties/include/includes/resource/resources
/build配置好以后那么你设置的位置下的配置文件都会被打包了 3_tomcat插件
我们如果创建war项目必然要部署在服务器上方式 部署在远程服务器上 将IDEA和外部 t o m c a t tomcat tomcat产生关联然后将项目部署在外部 t o m c a t tomcat tomcat上
现在学习一个新的方式不再依赖外部的 t o m c a t tomcat tomcat m a v e n maven maven提供了 t o m c a t tomcat tomcat插件我们可以配置来使用。
创建web项目—war项目 在index.jsp中随便写点东西 使用 T o m c a t Tomcat Tomcat插件发布部署并执行war工程的时候需要使用启动命令启动命令为 tomcat7:run。
命令中的tomcat7是插件命名由插件提供商决定。run为插件中的具体功能。
注意之前用的编译器插件资源拷贝插件不是可运行的插件 m a v e n maven maven直接帮我们运行了但是 t o m c a t tomcat tomcat属于可运行插件它什么时候工作需要程序员来控制怎么控制呢我们必须通过命令来运行控制
具体pom.xml文件的配置如下
buildfinalNamemaven_war_pro/finalNameplugins!-- 配置Tomcat插件 --plugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.2/versionconfiguration!-- 配置Tomcat监听端口 --port8080/port!-- 配置项目的访问路径(Application Context) --path//path/configuration/plugin/plugins
/build执行命令 显示 t o m c a t tomcat tomcat启动成功 在浏览器中访问index.jsp页面 9、私服搭建
1_私服介绍
问题导入
这里的私服和平时我们听的国服、体验服、欧服等等有什么区别 团队开发现状分析 私服是一台独立的服务器用于解决团队内部的资源共享与资源同步问题 N e x u s Nexus Nexus S o n a t y p e Sonatype Sonatype公司的一款 m a v e n maven maven私服产品下载地址https://help.sonatype.com/repomanager3/download 2_Nexus安装与启动 启动服务器命令行启动 nexus.exe /run nexus 访问服务器默认端口8081 http://localhost:8081 修改基础配置信息 安装路径下etc目录中nexus-default.properties文件保存有 n e x u s nexus nexus基础配置信息例如默认访问端口。 修改服务器运行配置信息 安装路径下bin目录中nexus.vmoptions文件保存有 n e x u s nexus nexus服务器启动对应的配置信息例如默认占用内存空间。
3_私服资源操作流程分析 4_私服仓库分类
问题导入
私服仓库分为哪几种
仓库类别英文名称功能关联操作宿主仓库hosted保存自主研发第三方资源上传代理仓库proxy代理连接中央仓库下载仓库组group为仓库编组简化下载操作下载
5_资源上传与下载
问题导入
往私服上传资源是否需要身份认证在哪里设置认证信息 资源上传与下载我们需要做三步配置执行一条指令。
第一步配置在 m a v e n maven maven的配置文件中配置访问私服的用户名、密码。
第二步配置在 m a v e n maven maven的配置文件中配置连接私服的地址(url地址)。
第三步配置在项目的pom.xml文件中配置上传资源的位置(url地址)。
配置好了上述三步之后要上传资源到私服仓库就执行执行 m a v e n maven maven生命周期deploy。 私服仓库说明 RELEASE存储自己开发的RELEASE发布版本的资源。SNAPSHOT存储自己开发的SNAPSHOT发布版本的资源。Central存储的是从中央仓库下载下来的依赖。 项目版本说明 RELEASE(发布版本)功能趋于稳定、当前更新停止可以用于发行的版本存储在私服中的RELEASE仓库中。SNAPSHOT(快照版本)功能不稳定、尚处于开发中的版本即快照版本存储在私服的SNAPSHOT仓库中。 从私服中下载依赖
【第一步】在 m a v e n maven maven的settings.xml中mirrors标签中配置此时就需要注释掉aliyun的配置。
mirroridnexus-maven/idmirrorOf*/mirrorOfurlhttp://localhost:8081/repository/maven-public//url
/mirrorprofileidallow-snapshots/idactivationactiveByDefaulttrue/activeByDefault/activationrepositoriesrepositoryidnexus-mavenc/idurlhttp://192.168.150.101:8081/repository/nexus-maven//urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository/repositories
/profile【第二步】在 n e x u s nexus nexus中设置允许匿名下载如果不允许将不会从私服中下载依赖 如果私服中没有对应的jar会去中央仓库下载速度很慢。可以配置让私服去阿里云中下载依赖。 上传依赖到私服中
【第一步】配置本地仓库访问私服的权限在 m a v e n maven maven的settings.xml的servers标签中配置
server!--id任意多个server的id不重复就行后面会用到--idmaven-nexus/idusernameadmin/usernamepassword123456/password!--填写自己nexus设定的登录秘密--
/server【第一步】配置当前项目访问私服上传资源的保存位置项目的pom.xml文件中配置
distributionManagementrepository!--和maven/settings.xml中server中的id一致表示使用该id对应的用户名和密码--idmaven-nexus/id!--如果jar的版本是release版本那么就上传到这个仓库根据自己情况修改--urlhttp://localhost:8081/repository/maven-releases//url/repositorysnapshotRepository!--和maven/settings.xml中server中的id一致表示使用该id对应的用户名和密码--idmaven-nexus/id!--如果jar的版本是snapshot版本那么就上传到这个仓库根据自己情况修改--urlhttp://localhost:8081/repository/maven-snapshots//url/snapshotRepository
/distributionManagement注意要和maven的settings.xml中server中定义的idmaven-nexus/id对应
【第三步】发布资源到私服命令
mvn deploy10、附录
1_更新依赖索引
有时候给idea配置完 m a v e n maven maven仓库信息后在idea中依然搜索不到仓库中的jar包。
这是因为仓库中的jar包索引尚未更新到idea中。
这个时候我们就需要更新idea中 m a v e n maven maven的索引了具体做法如下
打开设置----搜索maven----Repositories----选中本地仓库-----点击Update。 2_版本管理 SNAPSHOT快照版本 项目开发过程中临时输出的版本称为快照版本快照版本会随着开发的进展不断更新 RELEASE发布版本 项目开发到进入阶段里程碑后向团队外部发布较为稳定的版本这种版本所对应的构件文件是稳定的即便进行功能的后续开发也不会改变当前发布版本内容这种版本称为发布版本 发布版本 alpha版beta版纯数字版
3_清理maven仓库
初始情况下我们的本地仓库是没有任何jar包的此时会从私服去下载如果没有配置就直接从中央仓库去下载可能由于网络的原因jar包下载不完全这些不完整的jar包都是以lastUpdated结尾。
此时 m a v e n maven maven不会再重新帮你下载需要你删除这些以lastUpdated结尾的文件然后 m a v e n maven maven才会再次自动下载这些jar包。 如果本地仓库中有很多这样的以lastUpadted结尾的文件可以定义一个批处理文件在其中编写如下脚本来删除
set REPOSITORY_PATHE:\develop\apache-maven-3.6.1\mvn_repo
rem 正在搜索...del /s /q %REPOSITORY_PATH%\*.lastUpdatedrem 搜索完毕
pause操作步骤如下 定义批处理文件del_lastUpdated.bat (直接创建一个文本文件命名为del_lastUpdated后缀名直接改为bat即可 ) 在上面的bat文件上右键—》编辑 。修改文件 修改完毕后双击运行即可删除 m a v e n maven maven仓库中的残留文件。
4_跳过测试了解
问题导入
跳过测试会不会影响项目的构建过程
应用场景
功能更新中并且没有开发完毕快速打包……
跳过测试命令
mvn install –D skipTests注意事项
执行的项目构建指令必须包含测试生命周期否则无效果。例如执行compile生命周期不经过test生命周期。
细粒度控制跳过测试
pluginartifactIdmaven-surefire-plugin/artifactIdversion2.22.1/versionconfigurationskipTeststrue/skipTests!--设置跳过测试--includes!--包含指定的测试用例--include**/User*Test.java/include/includesexcludes!--排除指定的测试用例--exclude**/User*TestCase.java/exclude/excludes/configuration
/plugin