[TOC]
* [Pom.xml](Pom.md)
# 使用maven 管理项目
## 1.1. 基本要素
| 要素 | 说明 |
| ----------- | ------------------------------------------------------------ |
| 技术边界 | Maven是一个项目管理工具,基于xml,用于管理Java项目的构建、依赖和文档。|
| 特性 | 声明式构建、依赖管理、统一的项目结构、生命周期、插件等|
| 使用场景 | Java项目的构建与依赖管理|
| 应用方法 | Maven的生命周期阶段(clean、compile、test、package、install、deploy)、<br>依赖范围(compile、test、runtime等)、<br>插件(maven- compiler-plugin等)|
| 项目结构关系 | pom.xml文件定义项目元信息, src/main/java源代码,src/test/java测试代码,src/main/resources资源等|
|实施关键流程|1. 安装Maven <br> 2. 创建Maven项目: mvn archetype:generate <br>3. 编写pom.xml:包括配置依赖、插件等 <br>4. 编译项目:mvn compile<br>5. 运行测试:mvn test <br>6. 打包:mvn package <br>7. 安装到本地仓库:mvn install <br>8. 部署到远程仓库:mvn deploy|
## 1.2. 项目包
### 1.2.1. 可以按层拆分(中小型)项目和按模块拆分(大型)项目。
①大型项目:只需要将基础模块打包成jar包放在远程仓库,其它开发者添加配置就可以进行开发。
> 大型项目模块拆分
- account模块:处理账户业务,定义pom.xml
- order模块:处理订单业务,定义pom.xml
- user模块:处理用户业务,定义pom.xml
- 项目根目录:定义pom.xml,通过modules标签声明所有模块
②中小型项目:中小型项目按照传统项目分为Web、Service业务层、Dao数据层,依照员工自身的业务能力分配工作。
> 中小型项目层级拆分
- 项目根目录:定义全局pom.xml,包含项目版本、依赖、插件配置
- web层:包含web项目,定义pom.xml继承项目pom,添加web依赖 如spring-web、servlet-api等
- service层:包含业务逻辑,定义pom.xml继承项目pom,添加spring-context依赖
- dao层:包含数据访问,定义pom.xml继承项目pom,添加数据库驱动依赖等
- entity层:包含实体对象,不需定义pom.xml
- util层:包含工具类,不需定义pom.xml
### 1.2.2. 一键构建项目:使用命令可以对项目进行一键构建,操作系统中无需安装eclipse和tomcat。
如:mvn tomcat:run。更多常用命令:
①clean:清理;
②compile:编译,只编译main目录,不编译test中的代码;
③test-compile:编译test目录中的代码;
④test:运行test里边的代码;
⑤package:打包
- java项目->打成jar包;
- web项目->打成war包:
⑥install:发布项目到本地仓库,用在打jar包上,打成jar包可以被其他项目使用;
### 1.2.3. Maven命令的生命周期:
①Clean生命周期:clean;
②Default生命周期:compile、test-compile、test、package、install
③Site生命周期:site命令,生成项目描述文档静态页;
④不同的生命周期可以一起执行例如先clean再compile;
### 1.2.4. Maven命令的执行顺序:
①在相同生命周期中的命令才会受执行顺序的影响:
②Default生命周期中的命令执行顺序: compile <-test-compile <-test <-package <-install;
### 1.2.5. 是否打包依赖属性<Scope>
>依赖作用域也可称作依赖范围:maven中的依赖,会根据程序所处的阶段和场景发生变化,所以maven用scope属性来做限制;
|scope作用域 | 编译阶段Compile | 测试阶段Test | 运行阶段Run | 提供阶段Package | 示例 |
| :-- | :-- |:-- |:-- | :-- |:-- |
| compile(默认) | 支持 | 支持 | 支持 | 不支持 |spring-context|
| test | 不支持 | 支持 | 不支持 | 不支持 | junit |
|runtime | 不支持 | 不支持 | 支持 | 支持 | mysql-connector-java|
|provided | 不支持 | 不支持 | 支持 | 支持 | servlet-api |
|system | 支持 | 支持 | 支持 | 不支持 | com.xxx.jar |
|import | 不支持 |不支持 | 不支持 | 支持 | javax.servlet-api|
> 支持情况列表:
- compile:编译阶段、测试阶段和运行阶段有效,被依赖项目需要包含此依赖。
- test:仅测试阶段有效,被依赖项目不需要包含此依赖。
- runtime:仅运行阶段和提供阶段有效,被依赖项目需要包含此依赖。
- provided:仅提供阶段有效,被依赖项目不需要包含此依赖,运行环境已提供。
- system:编译阶段、测试阶段和运行阶段有效,被依赖项目需要包含此依赖,Maven不会在中央仓库中找到它。
- import:仅提供阶段有效,被依赖项目需要包含此依赖,用来导入dependencyManagement中声明的依赖版本号。
### 1.2.6. Maven模块化开发。
```[sequence]
Title: 徐
Service子项目-->>Base父项目: 继承至
Mapper子项目-->>Base父项目: 继承至
Web子项目-->>Base父项目: 继承至
Web子项目->Service子项目: 依赖
Service子项目->Mapper子项目: 依赖
Service子项目->Besn孙项目: 依赖
```
①maven 子项目可以继承父项目的依赖。
②上图将Maven-ssm-bean打包成jar,引入到 Maven-ssm-mapper、service、web/pom.xml做为依赖。分别就可以正常开发了。
### 1.2.7. 使用Nexus搭建私服。
> Nexus是Maven私服,用于搭建企业内部的Maven仓库,主要有以下作用:
1. 代理中央仓库,加速Jar包下载。
2. 存储企业内部发布的Jar包,实现企业内部的Jar包共享。
3. 作为企业内部的Release仓库,管理企业内部发布的Release版本。
4. 实现企业内部的Snapshot版本管理。
5. 提供强大的REST API,易于与CI服务器集成,实现自动化发布。
> 下面以Nexus3为例,说明如何搭建Maven私服:
1. 下载Nexus3安装包,并解压。进入bin目录下。
2. 启动Nexus: ./nexus start
3. 访问Nexus:默认地址http://localhost:8081,默认账号密码:admin/admin123。
4. 创建代理仓库:选择选择中央仓库centralMirror,同步中央仓库的所有jar。
5. 创建releases仓库:接收发布的Release版本jar。
6. 创建snapshots仓库:接收发布的Snapshot版本jar。
7. 创建仓库组,将上述三个仓库聚合起来,方便Maven下载。
8. 修改企业内部Maven settings.xml:
```
xml
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
```
9. 进入项目根目录,运行mvn deploy将项目部署到私服。
10. 其他项目只需引入私服地址即可下载使用。
熟练搭建和使用Maven私服,可以极大提高企业内部jar包与dependencies的共享效率,统一管理各环境下的版本。
- 系统设计
- 需求分析
- 概要设计
- 详细设计
- 逻辑模型设计
- 物理模型设计
- 产品设计
- 数据驱动产品设计
- 首页
- 逻辑理解
- 微服务架构的关系数据库优化
- Java基础架构
- 编程范式
- 面向对象编程【模拟现实】
- 泛型编程【参数化】
- 函数式编程
- 响应式编程【异步流】
- 并发编程【多线程】
- 面向切面编程【代码复用解耦】
- 声明式编程【注解和配置】
- 函数响应式编程
- 语法基础
- 包、接口、类、对象和切面案例代码
- Springboot按以下步骤面向切面设计程序
- 关键词
- 内部类、匿名类
- 数组、字符串、I/O
- 常用API
- 并发包
- XML
- Maven 包管理
- Pom.xml
- 技术框架
- SpringBoot
- 项目文件目录
- Vue
- Vue项目文件目录
- 远程组件
- 敏捷开发前端应用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 脚本机制
- 编译器API
- 注释
- 源码级注释
- Javadoc
- 安全
- Swing和图形化编程
- 国际化
- 精实或精益
- 精实软件数据库设计
- 精实的原理与方法
- 项目
- 零售软件
- 扩展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服务
- 1004_微服务数据模型范式
- 1005_数据模型
- 1006_springCloud
- AI 流程图生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和帮助函数
- WooCommerce的钩子和过滤器
- REST API
- 数据库API
- 模板系统
- 数据模型
- 1.Woo主题开发流程
- Filter
- Hook
- 可视编辑区域的函数工具
- 渲染字段函数
- 类库和框架
- TDD 通过测试来驱动开发
- 编程范式对WordPress开发
- WordPress和WooCommerce的核心代码类库组成
- 数据库修改
- 1.WP主题开发流程与时间规划
- moho
- Note 1
- 基础命令