ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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的共享效率,统一管理各环境下的版本。