Java阶段三01

第3章-第1节

一、知识点

maven的简介、安装和使用、仓库管理、项目构建、多模块项目、依赖管理

二、目标

  • 学习了解什么是maven

  • 能够配置maven

  • 使用maven创建项目

  • 掌握maven创建多模块项目的方式

  • 掌握maven的依赖管理和项目构建

三、内容分析

  • 重点

    • maven的安装和使用

    • 依赖管理

    • 多模块项目的创建

  • 难点

    • 多模块项目的创建

四、内容

1、认识Maven

1.1maven简介(了解)

Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project LifeCycle),一个依赖管理系统(Dependency managerment System),和用来运行定义在生命周期(phase)中插件(plugin)目标(goal)的逻辑。

Maven有一个生命周期,当你运行mvn install的时候被调用。这条命令告诉Maven执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个JAR文件这样的工作。 此外,Maven能够很方便的帮你管理项目报告生成站点管理JAR文件,等等。

1.2为什么使用maven
  • 第三方jar包

    我们在使用第三方框架的时候,我们会把jar包复制粘贴到WEB-INF/lib下。每次新创建工程都要这么做,造成工作区有大量的重复文件,如果使用maven,会让每个jar包在本地仓库中只保存一份,需要jar包的工程只要以坐标的方式简单的引用一下就行了。可以大大节约空间,让项目更轻巧。

  • jar包之间的依赖关系

    jar包往往不是孤立的,很多jar包需要在其他jar包的支持下才能正常工作。当我们去使用一个从未使用过的jar包,我们怎么知道这个jar包依赖于哪些其他的jar包呢?使用maven,可以自动将当前jar包所依赖的其他jar包全部导进来,无需人工参与,节约了我们大量的时间和精力。

  • 获取第三方jar包

    我们会使用很多的jar包,每个jar包获取的方式不尽相同。有时候找一个jar包要找遍互联网,找到的还是不规范的,不能使用。使用maven我们可以享受一个完全统一规范的jar包管理体系。

  • 将项目拆分成多个工程模块

    有些大型项目已经不能通过package结构来划分模块了,这时候必须将项目拆分成多个工程协同开发。

 

2、使用maven

  • 下载

  • 配置环境变量



  • 修改maven配置文件,conf下的settings.xml 第55行
 <localRepository>路径地址</localRepository>
  • IDEA配置maven

    • 在 IntelliJ IDEA 工作区上方的菜单栏中选择 File ,然后在下拉菜单中选则 Settings...,如下图

  • 在弹出对话框中,展开“Build,Execution,Deployment”,在 Build Tools 下选择 Maven,如下图

  • 在 Maven home path 中,指定本地 Maven 的位置

  • 勾选 User Settings file 后面的 Override,并指定本地仓库的 setting.xml 文件

  • 勾选 Local repository 后面的 Override,并指定本地仓库的地址

  • 打开新项目配置重复上面的操作

  • 创建maven项目

    【File】【New】【Project】选择Maven

  • 坐标

    使用以下三个向量在maven仓库中唯一的确定一个maven工程

    groupid:公司或者组织的域名倒序+当前项目名称

    artifactid:当前项目模块名称

    version:当前模块版本

  • 第一次生成会下载一些项目需要的jar包,需要等待下载完成

  • 下载速度慢 打开settings.xml文件

    <mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

  • pom.xml修改

    • jdk版本修改

      <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    • 删除pluginManagement标签

      <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      ...
      </pluginManagement>

      加入fastjson包

      <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version>
      </dependency>
  • 项目启动

    • 方式一:jetty

      <build><plugins><plugin><!--jerry插件--><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.25</version><configuration><!--热部署--><scanIntervalSeconds>10</scanIntervalSeconds><!--可指定当前项目的站点名--><contextPath>/myMaven</contextPath><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><!--设置启动的端口号--><port>8088</port></connector></connectors></configuration></plugin></plugins>
      </build>

    • 这里可以写端口号进行配置,xml中的端口号要去掉

      jetty:run -Djetty.port=8090
    • 方式2 tomcat

      <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><!--启动端口--><port>8089</port><!--可指定当前项目的站点名--><path>/myMaven</path><!--修改编码格式--><uriEncoding>UTF-8</uriEncoding><!--服务器名称--><server>tomcat7</server></configuration>
      </plugin>

      同上

      tomcat7:run

3、仓库管理

  • 本地仓库:为当前本机电脑上所有的maven工程服务

  • 远程仓库

    • 私服:架设在当前局域网环境下,为当前局域网范围内所有的maven工程服务

    • 中央仓库:架设在internet上,为全世界所有的maven工程服务

    • 中央仓库镜像:架设在各个大洲,为中央仓库分担流量,减轻中央仓库压力,同时更快的响应用户请求

4、构建

构建就是以我们编写的java代码、框架配置文件、国际化等其他资源文件、jsp页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目

  • clean 清理:删除以前的编译结果,为重新编译做好准备

  • compile 编译:将Java源程序编译为字节码文件

  • test 测试:针对项目中的关键点进行测试,确保项目在迭代开发中关键点的正确性

  • verify 报告:在每一次测试后以标准的格式记录和展示测试结果

  • package 打包:将一个包含诸多文件的工程封装成一个压缩文件用于安装或者部署。java工程对应jar包,web工程对应war包

    • 放到tomcat中webapps使用

    • bin/start.bat启动

    • 通过项目名称访问地址

  • install 安装:在Maven环境下特指将打包的结果,就是jar包或者war包安装到本地仓库中,供其他模块使用

  • deploy 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

5、Maven创建多模块项目

项目体量比较大的时候可以创建多模块项目,减少启动的时间

  • maven_parent 基模块

  • maven_common 工具模块

  • maven_user 用户模块

5.1创建maven_parent项目

1、创建项目 project

2、这一步什么都不选

3、和之前一样

5.2创建maven_common模块

1、选择模块Module Module Module

2、创建maven的java项目 quickstart

5.3创建maven_user模块

module创建的时候选择webapp即可

5.4修改配置并设置依赖关系
  • maven_common
    • 设置包、类、方法
      public class JDBCUtil {public static void getConnection(){System.out.println("获取连接");}
      }
  • maven_user
    • 添加maven_common的依赖
      <dependency><groupId>com.mashang</groupId><artifactId>maven_common</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope>
      </dependency>
    • 设置包、类、方法
      public static void main(String[] args) {JDBCUtil.getConnection();
      }
    • controller配置servlet
      <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
      </dependency>
    • parent添加tomcat
      • install parent
      • install 子模块
      • tomcat启动

6、依赖管理

  • 安装依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version>
</dependency>

Maven中关键部分,我们使用maven主要就是使用它的依赖管理功能

  • 坐标

    groupld, artifactld, version :依赖的基本坐标, 对于任何一个依赖来说,基本坐标是最重要的,Maven是根据坐标才能找到需要的依赖。

  • 依赖范围
    <scope></scope>
    • compile

      默认,表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常会包含进去

    • test

      仅仅参与项目测试相关工作,打包时不会打包到项目中

    • provided

      不参与打包,有容器提供(比如servlet相关api,已经有tomcat提供)

  • Exclusions
  • 传递性依赖(简单了解即可)

    传递依赖机制,让我们在使用某个jar的时候不去考虑他依赖了谁,maven会解析各个直接依赖的pom,将那些必要的间接依赖以传递性依赖的形式引入到当前项目中

    传递依赖可能会产生冲突!!!!

    冲突场景(不能模块间的依赖形成循环)

    a依赖于b,b依赖于c,c依赖于a (1.0版本)

a下存在两个不同版本的c,则会冲突

使用exclusions配置,会自动选择适用的版本

 <dependency><groupId>a</groupId><artifactId>a</artifactId><version>xxx</version><exclusions><groupId>c</groupId><artifactId>c</artifactId></exclusions></dependency>

7、小结

在本章中,你学习了什么是maven,maven的作用是什么,什么是仓库,如何使用maven来创建单个项目和多模块项目,多模块项目之间的关系管理,如何使用maven管理依赖,对于了解我们的真实开发又进了一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460157.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】构建Linux云桌面环境

目录 一、说明 二、离线安装Docker 1&#xff09;将下载的包上传到服务器上去 2&#xff09;安装docker 3) 启动docker 4&#xff09;配置加速器 三、安装云桌面镜像 四、启动云桌面 方式一&#xff1a;docker命令直接运行 方式二&#xff1a;docker-compose方式 五…

【ArcGIS Pro实操第4期】绘制三维地图

【ArcGIS Pro实操第4期】绘制三维地图 ArcGIS Pro绘制三维地图-以DEM高程为例参考 如何使用ArcGIS Pro将栅格数据用三维的形式进行表达&#xff1f;在ArcGIS里可以使用ArcScene来实现&#xff0c;ArcGIS Pro实现原理跟ArcScene一致。由于Esri未来将不再对ArcGIS更新&#xff0c…

“震惊!消费满额即领高额返现,循环购物模式揭秘“

购物满额赠高额返现&#xff0c;每日还能领现金&#xff1f;资金还能提现&#xff1f;这听起来简直像天方夜谭。商家难道真的在无条件发放资金&#xff1f; 大家好&#xff0c;我是电商策略专家吴军。 今天&#xff0c;我要揭秘一种前沿的商业模式——循环消费回馈模式。 这种…

Leetcode 第 420 场周赛题解

Leetcode 第 420 场周赛题解 Leetcode 第 420 场周赛题解题目1&#xff1a;3324. 出现在屏幕上的字符串序列思路代码复杂度分析 题目2&#xff1a;3325. 字符至少出现 K 次的子字符串 I思路代码复杂度分析 题目3&#xff1a;3326. 使数组非递减的最少除法操作次数思路代码复杂度…

Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动

前言&#xff1a;上一篇实现了角色简单的移动控制&#xff0c;但是实际游戏中玩家的视角是可以转动的&#xff0c;并根据转动后视角调整移动正前方。本篇实现玩家第一人称视角转动和移动&#xff0c;觉得有帮助的话可以点赞收藏支持一下&#xff01; 玩家第一人称视角 修复小问…

代码随想录算法训练营第十二天(补) 二叉树| 二叉树理论知识、深度优先遍历、广度优先遍历

目录 一、二叉树理论基础 &#xff08;一&#xff09;二叉树的种类 二叉搜索树 平衡二叉搜索树 &#xff08;二&#xff09;二叉树的存储 &#xff08;三&#xff09;二叉树的遍历 &#xff08;四&#xff09;二叉树的定义 二、二叉树的递归遍历 三、二叉树的层序遍历 …

在线教育系统源码开发详解:网校培训平台搭建的核心技术

本篇文章&#xff0c;笔者将详细介绍在线教育系统源码的开发过程&#xff0c;重点聚焦网校培训平台搭建的核心技术&#xff0c;以期为有意从事在线教育行业的开发者提供实用的参考。 一、在线教育系统的构成 前端负责用户的交互体验&#xff0c;后端处理业务逻辑&#xff0c;…

利士策分享,赚大钱与赚小钱的哲学,选大还是小?

利士策分享&#xff0c;赚大钱与赚小钱的哲学&#xff0c;选大还是小&#xff1f; 在商海浮沉的浪潮中&#xff0c;时常能听到一些业界大佬发表关于财富积累的独到见解。 其中&#xff0c;有一种观点颇为引人注目&#xff0c;那便是“赚大钱比赚小钱容易”。 此言一出&#xf…

【vue】14.插槽:构建可复用组件的关键

今天看代码的时候碰到了插槽&#xff0c;有些看不懂&#xff0c;所以写下这篇文章&#xff0c;系统地梳理一下关于插槽的内容&#xff0c;也希望给大家带来一些帮助。 // 我碰到的插槽长这样 <template #default"scope">... </template> 一.什么是插槽…

Java项目实战II基于Spring Boot的美食烹饪互动平台的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今美食…

ssm基于ssm框架的滁艺咖啡在线销售系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1选题动因 1 1.2目的和意义 1 1.3论文结构安排 2 第2章 开发环境与技术 3 2.1 MYSQ…

echarts实现 水库高程模拟图表

需求背景解决思路解决效果index.vue 需求背景 需要做一个水库高程模拟的图表&#xff0c;x轴是水平距离&#xff0c;y轴是高程&#xff0c;需要模拟改水库的形状 echarts 图表集链接 解决思路 配合ui切图&#xff0c;模拟水库形状 解决效果 index.vue <!--/*** author:…

引入RFID技术,焕新消防应急物资管理方式

智能化应急消防管理系统在现代消防工作中扮演着至关重要的角色&#xff0c;引入射频识别&#xff08;RFID&#xff09;技术&#xff0c;并根据消防设备管理的具体状况及需求&#xff0c;广州一芯未来研发了一套RFID消防设备管理系统。 一、射频识别技术RFID简述 射频识别技术RF…

软件压力测试有多重要?北京软件测试公司有哪些?

软件压力测试是一种基本的质量保证行为&#xff0c;它是每个重要软件测试工作的一部分。压力测试是给软件不断加压&#xff0c;强制其在极限的情况下运行&#xff0c;观察它可以运行到何种程度&#xff0c;从而发现性能缺陷。 在数字化时代&#xff0c;用户对软件性能的要求越…

正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品

近日&#xff0c;上海斯歌旗下BPM PaaS管理软件&#xff08;NBS&#xff09;等多款产品入选华为云云商店联营商品&#xff0c;上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式&#xff0c;双方合作能够深…

「Mac畅玩鸿蒙与硬件7」鸿蒙开发环境配置篇7 - 使用命令行工具和本地模拟器管理项目

本篇将讲解在 macOS 上配置 HarmonyOS 开发环境的流程&#xff0c;聚焦 hvigorw 命令行工具的使用。我们将以创建 HelloWorld 项目为例&#xff0c;演示使用 hvigorw 进行项目构建、清理操作&#xff0c;并通过 DevEco Studio 的本地模拟器进行预览&#xff0c;帮助提升项目开发…

ECharts饼图,配置标注示例

const color ["#00FFB4", "#5498FD", "#6F54FD", "#FD5454", "#FDA354",]const datas [{ value: 100, name: "一年级" },{ value: 70, name: "二年级" },{ value: 184, name: "三年级" },{…

基于卷积神经网络的苹果病害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 苹果病害识别与防治系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积…

YOLO即插即用模块---CAA

oly Kernel Inception Network for Remote Sensing Detection 论文地址&#xff1a;2403.06258https://arxiv.org/pdf/2403.06258 主要问题&#xff1a; 目标尺度变化大&#xff1a; 遥感图像中目标尺度范围广泛&#xff0c;从大型物体&#xff08;如足球场&#xff09;到小型…

【网络面试篇】TCP与UDP类

目录 一、综述 1. TCP与UDP的概念 2. 特点 3. 区别 4. 对应的使用场景 二、补充 1. 基础概念 &#xff08;1&#xff09;面向连接 &#xff08;2&#xff09;可靠的 &#xff08;3&#xff09;字节流 2. 相关问题 &#xff08;1&#xff09;TCP 和 UDP 可以同时绑定…