MAVEN 依赖环境
Maven
Maven 是apache 旗下的一个开源项目 , 是一款用于管理和构建 Java 项目的工具
Maven的作用
依赖管理:方便快捷的管理项目依赖的资源( jar 包 ),避免版本冲突问题。
统一项目结构: 提供标准,统一的项目结构。
项目构建:标准跨平台( Linux , Windows , MacOS)的自动化项目构建方式。
//maven 命令
compile 编译
package 打包 打包后会放在target 文件下
clean 清理项目的生成文件,
install 将打包后的项目 安装到本地 maven 仓库 ,这使得其他项目可以依赖这个项目
test 运行项目的单元测试
verify 它会执行在 “compile” 和 “test” 阶段之后的所有默认插件目标,确保项目的编译和测试都已经成功完成。然后,它会运行一些额外的验证任务,这些任务通常由特定的插件提供
Maven 概述
介绍: Apache Maven 是一个项目管理和构建工具,它基于项目对象模型( POM -Project Object Model)的概念,通过一小段描述信息来管理项目的构建。
官网: http://maven.apache.org/
仓库: 用于存储资源,管理各种 jar 包
- 本地仓库:自己计算机上的一个目录。
- 中央仓库:由 maven 团队 维护的全球唯一的。 仓库地址: https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库。
Maven 安装
步骤:
①解压 maven 安装包 例如: apache-maven-3.6.1-bin.zip。
②配置本地仓库,修改 conf/settings.xml 中的
<localRepository>E:/develop/apache-maven-3.6.1/mvn_repo </localRepository>
③配置阿里云私服 , 修改conf /settings.xml 中的
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
④配置环境变量: MAVEN_HOME 为maven 的解压目录,并将其 bin 目录(%MAVEN_HOME%/bin) 加入 PATH 环境变量
通过 mvn -v 查看版本,来判断是否安装完成
IDEA 集成 Maven
配置Maven 环境
选择 IDEA 中的 File ---》 Settings(设置)----》 build,Execution,Deployment(构建,执行,部署)---》Build Tools(构建工具) ---》Maven
创建Maven项目
创建模块,选择Maven , 点击next
填写模块名称,坐标信息,点击 finsh 创建完成
编写 Helloworld 并运行
Maven坐标
什么是坐标?
- Maven中的坐标是 资源的唯一标识,通过该坐标可以唯一定位资源位置。
- 使用坐标来定义项目或引入项目中需要的依赖。
Maven 坐标的主要组成
groupId:定义当前 Maven 项目隶属组织名称(通常是域名反写 例如:com.itheima)
artifactId:定义当前 Maven 项目名称(通常是模块名称 例如order-service、goods-service)
version:定义当前项目版本号
导入maven 项目
选择右侧 maven 面板,点击 + 号 ,选中对象项目的 pom.xml 文件 双击即可。
依赖管理
-
依赖配置
依赖: 指当前项目运行所需要的 jar 包,一个项目中可以引入多个依赖。
配置:
在pom.xml 中编写
标签 在
标签中,使用 引入坐标 定义坐标的 groupId,artifactId,version
点击刷新,引入最新加入的 坐标
注意事项:
如果引入的依赖项,在本地仓库中不存在,将会连接远程仓库/中央仓库,然后下载依赖。
如果不知道依赖的坐标信息,可以到 https://mvnrepository.com/ 中搜索。
-
依赖传递
Maven 中的依赖是具有传递性的
直接依赖: 在当前项目中,通过依赖配置建立的依赖关系
间接依赖: 被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
还可以排除依赖
<exclusions> 排除的依赖 可以不加版本号 <exclusion> <groupId> *** </groupId> <artifactId> *** </artifactId> </exclusion> </exclusions>
-
依赖范围
依赖的 jar 包 默认情况下 , 可以在任何地方使用。可以通过
... 设置其作用范围。作用范围:
主程序范围有效。 (main 文件夹范围内)
测试程序范围有效。 (test 文件夹范围内)
是否参于打包运行。 (package 指令范围内)
scope 值 主程序 测试程序 打包(运行) 范例 complie(默认) Y Y Y log4j test - Y - junit provided Y Y - servlet-api runtime - Y Y jdbc驱动 -
生命周期
Maven 中有三套 相互独立的 生命周期:
clean:清理工作
default: 核心工作,例如编译,测试、打包、安装,部署等。
site : 生成报告,发布站点等。
Maven 高级
分模块设计与开发
是什么?
就是将项目按照功能拆分成若干个子模块,方便项目的管理维护,扩展、也方便模块间的相互调用,资源共享。
为什么?
便于维护,可以复用组件
怎么做?
分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开完完毕之后,然后进行拆分。
创建新的模块 选择 maven 就可以了 ,引入该模块自己所需要的依赖即可
然后需要该模块的模块,引入相关依赖就可以。
继承与聚合
继承:
概念:继承描述的是两个工程之间的关系,与Java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
作用:简化依赖配置,统一依赖管理。
实现:
所有 子model 都继承一个 父model ,这样就可以简化子model 的依赖配置
(在Maven 当中,一个工程/model 只能继承一个 父工程/model 但是可以多重继承)
步骤:
-
创建maven 模块 tlias-parent ,该工程为父工程,设置打包方式 pom (默认都是jar)
-
在子工程的pom.xml文件中,配置继承关系。
继承父工程的坐标, 一旦实现继承关系,坐标中的groupId是可以省略的,因为会自动继承父工程的
relativePath 指定父工程的pom 的文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程) -
在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。
若子父工程都配置了同一个依赖的不同版本,以子工程为准。
版本锁定:
介绍: 在 maven 当中 我们可以通过在父工程的pom 文件中通过
<!--父工程 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--子工程 -->
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>
注意事项:子工程引入依赖时,无需锁定
如果在父工程当中我们有大量的依赖,拥有许许多多的依赖版本,此时就会比较繁琐,还是不便于集中管理和控制,我们可以通过自定义属性来解决,在pom.xml文件中 通过
<properties>
<lombok.version>1.18.24</lombok.version>
<jjwt.version>0.9.0</jjwt.version>
</properties>
此时的version 标签就可以通过 ${lombok.version} 来代替版本号 打括号里面就是标签属性名
例如:
<dependency>
<groupId>com.tele.toolkit</groupId>
<artifactId>tele-toolkit-annotation</artifactId>
<version>${tele-toolkit.version}</version>
</dependency>
聚合:
我们在打包 工程 的过程中 可以发现 ,如果一个工程依赖了其他工程的jar 包 这时候我们就需要先把它所依赖的工程的jar包打包好,这样就十分复杂繁琐,所以我们要有一个聚合工程;
聚合概念:将多个模块组织成一个整体,同时进行项目的构建
聚合工程:一个不具业务功能的 “空”工程 (有且只有一个 pom 文件)
作用:快速构建项目 (无需根据依赖关系手动构建,直接在聚合工程上构建即可)
<!--maven中可以通过<modules> 设置当前聚合工程所包含的子模块的名称 -->
聚合:举例
<!--父工程 聚合工程上 -->
<modules>
<module>border-common</module>
<module>border-gateway</module>
<module>border-auth</module>
<module>border-services</module>
<module>border-visual</module>
<module>border-job</module>
</modules>
注意事项:聚合工程中所包含的模块,在构建的时候,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。
继承与聚合:
作用:
- 聚合用于快速构建项目;
- 继承用于简化依赖配置,统一管理依赖
相同点:
- 聚合与继承的 pom.xml 文件的打包方式 均为 pom , 可以将两种关系只做到同一个pom 文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
- 聚合是在聚合过程中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
私服
介绍:是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题
注意事项:私服在企业的项目开发中,一个项目/公司,只需要一台私服。
资源上传与下载
工程打包之后 ,带着上传资源的url地址,install 打包到本地仓库,通过setting.xml中的servers配置携带访问私服的用户名/密码 deploy 到私服
私服有三个仓库 central release snapshot
central: 这个仓库的jar 包 就是从中央仓库下载下来的 jar 包
release: 存放的都是项目组内部共享的资源,
snapshot: 存放的都是项目组内部共享的资源,
至于存release 还是 snapshot 和项目版本有关 (默认是 SNAPSHOT 版本)
- RELEASE(发行版本):功能趋于稳定,当前更新停止,可以用于发行的版本,存储在私服中的RELEASE 仓库中。
- SNAPSHOT(快照版本):功能尚不稳定,尚处于开发中的版本,即快照版本,存储在私服的 SNAPSHOT 仓库中。
<version>1.0.0-SNAPSHOT</version> 默认是这个
<!-- 不加或者加上RELEASE 就是发行版本-->
<version>1.0.0-RELEASE</version>
<version>1.0.0</version>
1、设置访问私服的用户名密码(在setting.xml中的servers中配置)
<server>
<id>maven-release</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
2、IDEA 中的maven 工程的pom 文件中配置上传(发布)地址
<distributionManagement>
<repository>
<id>maven-release</id>
<url>http://192.168.150.68:8808/repository/maven-release</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://192.168.150.68:8808/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
3、设置私服依赖下载的仓库组地址(settings.xml中的 mirrors ,profiles中配置)
<mirror>
<id>maven-public</id>
<mirrorOF>*</mirrorOF>
<url>http://192.168.150.68:8808/repository/maven-public</url>
</mirror>
<profile>
<id>allow-snapshots</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>maven-public</id>
<ur1>http://192.168.150.101:8081/repository/maven-pub1ic/</ur1>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
打包部署
前端打包: 执行脚本 npm build ,
npm run build
打包之后会 生成一个dist 目录 ,我们需要在 nginx 上部署 前端
可以直接将 生成的dist 目录里面的东西 复制到 nginx 的 html 目录中(html目录中原先的东西可以删除)
启动 双击nginx.exe 文件即可, Nginx 服务器 默认占领 80 端口号。
更换nginx 的端口号 在conf 目录中 找到 nginx.conf 在里面大概36 行 找到默认端口,修改 listen的值
查看端口号占用cmd 命令 netstat -ano | findStr 80 (查询哪个进程占用了80端口)
最后面一排是 pid 可以通过 任务管理器看是哪一个进程在占用。
nginx 目录介绍
conf 配置文件目录
contrib
docs
html 静态资源文件目录
logs 日志文件目录
temp 临时文件目录
nginx.exe
后端打包
1、首先配置文件中的地址,不能使用localhost
2、在pom 中 加载 打包插件 点击 maven 的 package
```xml
<build>
<plugins>
<!-- springboot 打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3、打包好之后,会生成一种 jar 包,需要把 jar 包放在服务器上面,最后通过命令运行 jar 包 (nohup)