项目管理工具Maven

Maven

Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
  

课程内容的介绍

1. Maven基础内容
2. Maven的依赖管理
3. 聚合工程
4. Maven私服搭建
  

一、 Maven基础

1.Maven介绍
1.1为什么需要使用Maven
之前学Spring的时候我们需要单独自己去找相关的jar.这些jar包我们还能通过官网能找到,但是比如我们要找JSTL或者Hibernate验证jar及依赖包的时候我们并不是很容易的找的。所以我们希望有种更加方便管理我们jar的工具,Maven刚好能帮我们解决这个问题。
  
1.2Maven是什么?
官方的解释:
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
   
Maven两大核心
1. 依赖管理:就是对jar包的统一管理。
2. 构建项目:项目编码完成后,对项目的编译,测试,打包,部署等操作。
  
初学的时候对Maven的概念比较模糊,仅仅知道它可以管理我们的jar包和jar之间的依赖关系,但它的功能并不仅仅局限于此。我们通过安装使用管理来体验吧。

    
2. Maven的安装配置
2.1 官网下载
官网地址:https://maven.apache.org/download.cgi
下载Windows版本即可。

  
2.2 解压缩
将下载的压缩文件解压缩到非中文目录下即可。

  
2.3 配置Maven的环境变量
先配置MAVEN_HOME

  
然后将MAVEN_HOME追加到path变量之后。

  
2.4 验证
环境变量配置好后,我们就可以在系统的任意位置来使用Maven了。

3.仓库类型介绍

  
jar包查找的顺序:

   
中央仓库地址:https://mvnrepository.com
  
4.本地仓库配置
修改我们在Maven安装的配置文件。

  

  
修改IDEA中的Maven默认配置。

  

  
配置好后需要的jar依赖如果本地仓库没有的话就需要去中央仓库下载,但是中央仓库在国外,速度会很慢,这时我们可以配置镜像服务器,只需要在setting.xml中添加镜像地址即可。
<!-- 阿里代理镜像地址-->
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>*</mirrorOf>
</mirror>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  
配置了阿里云镜像代理后重启IDEA,可以看到新的依赖是通过镜像代理下载的。

  
5.创建基于Maven的Web项目
5.1 Web项目创建
选择相关的类型。

  
设置项目的相关信息。

  
核查Maven的配置信息。

  

  
初识项目结构。

  
我们需要自己手动添加相关的目录结构。

  

创建好的最终的目录结构:

  
5.2 Tomcat插件配置
5.2.1 pom文件中添加配置
      <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port> <!-- 访问端口--><path>/</path>    <!-- 访问路径--></configuration></plugin>
  

  
5.2.2 启动Tomcat
选中右侧侧边栏中的Maven点击。

  

  
启动成功。

  
访问成功。

  

二、依赖管理

Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象。这些对象通过一个名为项目对象模型(Project Object Model, POM)的XML文件描述。这个POM告诉Maven它正处理什么类型的项目,如何修改默认的行为来从源码生成输出。同样的方式,一个Java Web应用有一个web.xml文件来描述,配置,及自定义该应用,一个Maven项目则通过一个 pom.xml文件定义。该文件是Maven中一个项目的描述性陈述;也是当Maven构建项目的时候需要理解的一份“地图”。
  
1、Maven坐标
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>
</dependencies>
   
1.1 dependencies
在dependencies标签中添加需要添加的jar对应的Maven坐标。
  
1.2 dependency
一个dependency标签代表了一个Maven坐标。
   
1.3 groupId
团体、公司、小组、项目、或其他团体标识的体现,约定以创建这个项目的组织域名倒写开头。也是我们在本地仓库中查看依赖的目录结构。一个Maven坐标中是必须有的。
  
1.4 artifactId
在groupId下的表示一个单独的项目的唯一标识。同样是必须的。
  
1.5 version
一个项目的特定版本。也是必须的。
  
1.6 scope
依赖范围。

  
2、依赖冲突
2.1 冲突产生的根本原因

  
上图中a jar包通过b和d间接依赖到的c jar包版本不一致,出现了冲突。

   

  
2.2 依赖冲突的解决方案
2.2.1 第一优先声明原则
谁先定义就使用谁的。

  

  
2.2.2 路径就近原则
直接声明优先级更高。

  
2.2.3 排除依赖
我们在Maven坐标中可以通过exclusions标签来显示的排除掉简介依赖。

  

三、聚合工程

所谓聚合项目,实际上就是对项目分模块,互联网项目一般来说按照业务分(订单模块、VIP模块、支付模块、CMS模块…),传统的软件项目,大多采用分层的方式(Dao、Serivce、Controller):
  
1. 聚合工程的结构
bobo-parent pom 管理|-- bobo-manager pom 管理|-- bobo-manager-dao jar|-- bobo-manager-service jar|-- bobo-manager-model jar|-- bobo-manager-commons jar|-- bobo-manager-controller war
  
2.项目结构创建
2.1创建bobo-parent

  
2.2 创建bobo-manager
这也是一个POM工程,而且是bobo-parent下的一个子工程。

  
注意创建的module的父工程。

  

  

  
2.3 分别创建4个java工程
创建bobo-manager-dao

  
创建bobo-manager-service

  
创建bobo-manager-model

  
创建bobo-manager-commons

  

  
2.4 创建bobo-manager-controller
创建对应的web项目,选择对应的模板

  

  
等待初始化完成。

  
3. 依赖关系
3.1 依赖关系介绍
完整的依赖关系

  
控制层依赖关系

  
service层依赖关系

  
dao层的依赖关系

  
3.2 项目打包
bobo-parent打包在IDEA中会一性的给所有的子工程都打包。

  

  

  
3.3 依赖关系配置
controller依赖service。那就在Controller的pom文件中添加service的依赖。

  
service依赖dao。在service的pom文件中添加依赖。

  
dao依赖commons和model两个模块。

  
完整依赖关系图。

  
4.聚合工程的运行
4.1 创建UserBean
package com.bobo.model;public class User {private Integer id;private String userName;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +'}';}
}
  
4.2 创建Dao
package com.bobo.dao;import com.bobo.model.User;public interface IUserDao {User queryUser();
}
package com.bobo.dao.impl;import com.bobo.dao.IUserDao;
import com.bobo.model.User;public class UserDaoImpl implements IUserDao {@Overridepublic User queryUser() {User user = new User();user.setId(666);user.setUserName("波波");return user;}
}
  
4.3 创建Service
package com.bobo.service;import com.bobo.model.User;public interface IUserService {User queryUser();
}
package com.bobo.service.impl;import com.bobo.dao.IUserDao;
import com.bobo.dao.impl.UserDaoImpl;
import com.bobo.model.User;
import com.bobo.service.IUserService;public class UserServiceImpl implements IUserService {private IUserDao dao = new UserDaoImpl();@Overridepublic User queryUser() {return dao.queryUser();}
}
   
4.4 创建Controller
创建Servlet
package com.bobo.servlet;import com.bobo.model.User;
import com.bobo.service.IUserService;
import com.bobo.service.impl.UserServiceImpl;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class UserServlet extends HttpServlet {private IUserService service = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {User user = service.queryUser();System.out.println(user);}
}
  
web.xml的配置
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>userServlet</servlet-name><servlet-class>com.bobo.servlet.UserServlet</servlet-class></servlet><servlet-mapping><servlet-name>userServlet</servlet-name><url-pattern>/userServlet</url-pattern></servlet-mapping>
</web-app>
   
添加Tomcat插件
<plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port> <!-- 访问端口--><path>/</path> <!-- 访问路径--></configuration></plugin>
</plugins>
   
4.5 运行
通过Tomcat插件运行。

  
访问

  
访问成功说明聚合工程搭建完成!
  

四 私服-Nexus

仓库管理器也叫私服代理仓库
仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。
  
1、Nexus介绍
Nexus是一个强大的Maven仓库管理器, 它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。 Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。 Nexus支持WebDAV与LDAP安全身份认证。
  
2、Nexus安装
下载安装文件,可以自行去官网下载,也可以获取我提供给大家的源文件。

  
解压缩到一个非中文目录下即可。

  
在cmd下切换到Nexus的bin目录下执行 nexus install (以管理员身份进入)。

  
启动nexus服务 nexus start

  
测试访问:http://localhost:8081/nexus

  
默认的账号密码:admin admin123

  
3、Nexus介绍
3.1 仓库类型

  
3.2 默认仓库介绍

  
4、开启远程索引
获取提供给大家的索引文件。

  
停止Nexus服务。

  
将提供给大家的索引文件覆盖到%Nexus_Home%\sonatype-work\nexus\indexer\central-ctx文件夹下。

  
重启服务即可。

  
5、创建宿主仓库

  

  

  
6、创建代理仓库
虽然搭建了私服,但是如果私服中没有我们需要的jar包,它还是会通过默认的代理仓库去中央仓库下载相关的jar。这时速度同样会很慢,这时我们可以在Nexus中添加阿里的代理服务器。

  
配置的阿里云的镜像地址:http://maven.aliyun.com/nexus/content/groups/public/

  

  
7、创建仓库组

  

  
8、使用私服
想要在我们自己的Maven项目中关联我们自己配置的私服服务器。
  
在setting配置文件中添加server标签。
<!-- 配置私服服务 -->
<server><id>nexus</id><username>admin</username><password>admin123</password>
</server>
  

  
然后在setting配置文件的mirrors标签中添加私服仓库组的配置。
<!-- 去私服服务中查询 -->
<mirror><id>nexus</id><mirrorOf>*</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://localhost:8081/nexus/content/groups/DpbGroup/</url>
</mirror>
 
9、上传jar包到私服中

  
修改setting.xml文件。
<server><id>releases</id><username>admin</username><password>admin123</password>
</server>
<server><id>snapshots</id><username>admin</username><password>admin123</password>
</server>
  
然后需要修改对应的pom文件。
<!-- 配置上传私服路径 -->
<distributionManagement><repository><id>releases</id><url>http://localhost:8081/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>snapshots</id><url>http://localhost:8081/nexus/content/repositories/snapshots/</url></snapshotRepository>
</distributionManagement>
  
执行deploy命令。

  
在私服中收搜上传的jar包。

  
10、特定jar包上传
有些第三方的jar包是不存在与Maven的中央仓库中的。那么我们只能将这个jar包上传到Maven私服仓库中。

  

  
最后不要忘了 点击 Upload Artifact(s) 按钮。

  
11、从私服下载jar包
setting.xml文件中配置模板。
<profile><id>dev</id><repositories><repository><id>nexus</id><url>http://localhost:8081/nexus/content/groups/BoboGroup/</url><!--是否下载releases构件 --><releases><enabled>true</enabled></releases><!--是否下载snapshots构件 --><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>public</id><name>Public_Repositories</name><url>http://localhost:8081/nexus/content/groups/BoboGroup/</url></pluginRepository></pluginRepositories>
</profile>
  
激活模板。
<!-- 激活模板-->
<activeProfiles><activeProfile>dev</activeProfile>
</activeProfiles>
  

  
如果这样设置还是不能下载snapshots版本的依赖,那就在pom中添加如下的配置。
<repositories><repository><id>BoboGroup</id><url>http://localhost:8081/nexus/content/groups/BoboGroup/</url><!--是否下载releases构件 --><releases><enabled>true</enabled></releases><!--是否下载snapshots构件 --><snapshots><enabled>true</enabled></snapshots></repository>
</repositories>
  
效果如下。

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

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

相关文章

数据版本控制利器LakeFS的介绍,以及其使用方法,与其它工具结合案例

LakeFS介绍 LakeFS 是一个开源的数据湖版本控制系统&#xff0c;可以帮助用户管理和控制数据湖中的数据版本。以下是LakeFS的一些主要用处和功能介绍&#xff1a; 数据版本控制&#xff1a;LakeFS 提供了类似于 Git 的版本控制功能&#xff0c;可以跟踪和管理数据湖中的数据版…

【一】使用vue-cli创建vue3的helloworld项目

不再推荐使用vue-cli命令创建vue3的项目&#xff0c;vue-cli 是 Vue 早期推出的一款脚手架&#xff0c;使用 webpack 创建 Vue 项目。后期推荐使用 create-vue&#xff0c;create-vue 是 Vue3 的专用脚手架&#xff0c;使用 vite 创建 Vue3 的项目(关注【二】使用create-vue创建…

超维空间M1无人机使用说明书——41、ROS无人机使用yolo进行物体识别

引言&#xff1a;用于M1无人机使用的18.04系统&#xff0c;采用的opencv3.4.5版本&#xff0c;因此M1无人机只提供了基于yolov3和yolov4版本的darknet_ros功能包进行物体识别&#xff0c;识别效果足够满足日常的物体识别使用&#xff0c;如果需要更高版本的yolov7或者yolov8&am…

十八:爬虫-JS逆向(下)

一&#xff1a;AES与DES DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥&#xff0c;信息的发送者。和信息的接收者在进行信息的传输与处理时&#xff0c;必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函…

thinkadmin安装步骤

一,先cmd运行安装命令 ### 创建项目( 需要在英文目录下面执行 ) composer create-project zoujingli/thinkadmin二,在confing中的database.php配置数据库 三,将仓库的data复制到app目录下 https://gitee.com/zoujingli/think-plugs-data 四,在cmd运行命令安装数据库 //…

第二百五十二回

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了如何在页面中添加图片相关的内容&#xff0c;本章回中将介绍如何给组件添加阴影.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的阴影类似影子&#xff0c;只是它不像影子那么明显&a…

C++/OpenGL应用程序

图像应用程序大部分是 C 编写&#xff0c;OpenGL 调用实现与 3D 渲染相关任务将会使用一些扩展库: GLEW、GLM、GLFW、SOLL2 等。 GLFW 库包含 GLFWwindow 类&#xff0c;我们可以在其上进行 3D 场景绘制。OpenGL 也向我们提供了用于 GLSL 程序载入可编程着色阶段并对其进行编译…

【微服务】springcloud集成skywalking实现全链路追踪

目录 一、前言 二、环境准备 2.1 软件环境 2.2 微服务模块 2.3 环境搭建 2.3.1 下载安装包 2.3.2 解压并启动服务 2.3.3 访问web界面 三、搭建springcloud微服务 3.1 顶层公共依赖 3.2 用户服务模块 3.2.1 准备测试使用数据库 3.2.2 添加依赖 3.2.3 添加配置文件 …

how2heap-2.23-11-poison_null_byte

什么是poison_null_byte 当然不止这一种&#xff0c;下面最简单的形式 #include <malloc.h> int main() {char * a malloc(0x200);char * b malloc(0x200);size_t real_size malloc_usable_size(a);a[real_size] 0;return 0; }影响&#xff1a; chunk a&#xff0…

OpenVINS学习6——VioManagerHelper.cpp,VioManagerOptions.h学习与注释

前言 VioManager类里还有VioManagerHelper.cpp,VioManagerOptions.h这两个文件&#xff0c;也包含了一些函数&#xff0c;这次接着看这个 。 整体分析 void VioManager::initialize_with_gt(Eigen::Matrix<double, 17, 1> imustate) 给一个状态&#xff0c;然后初始化…

【C语言】段错误、内存溢出、内存泄漏(区别)、堆溢出、栈溢出

目录 段错误内存溢出内存泄漏栈溢出堆溢出栈溢出和堆溢出区别 段错误 什么时候会发生段错误&#xff1f; 段错误通常发生在访问非法内存地址的时候&#xff0c;即使用了野指针&#xff08;指向一个已删除的对象或者未申请访问受限内存区域的指针&#xff09;或这试图修改字符串…

【Matplotlib】基础设置之图像处理05

图像基础 导入相应的包&#xff1a; import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np %matplotlib inline导入图像 我们首先导入上面的图像&#xff0c;注意 matplotlib 默认只支持 PNG 格式的图像&#xff0c;我们可以使用 mpimg.im…

MySQL深入——9

如何正确的显示随机信息&#xff1f; 我们来模拟在英语单词app当中随机出现三个英语单词的情况&#xff0c;我们首先创建一张表words&#xff0c;然后给这个表当中插入10000条信息进行量化。 select word from words order by rand() limit 3&#xff1b; order by rand&…

基础数据结构第七期 Trie树

前言 Trie树大家能够掌握即可&#xff0c;其实用到的地方并不多&#xff0c;本文将为大家介绍一下。 一、Trie树的基本内容 1、根节点不包含字符&#xff0c;除根结点之外每一个结点都只包含一个字符&#xff1b; 2、字典树用边表示字母表示 3、从根节点到某一结点&#xff…

通过盲对抗性扰动实时击败基于DNN的流量分析系统

文章信息 论文题目&#xff1a;Defeating DNN-Based Traffic Analysis Systems in Real-Time With Blind Adversarial Perturbations 期刊&#xff08;会议&#xff09;&#xff1a;30th USENIX Security Symposium 时间&#xff1a;2021 级别&#xff1a;CCF A 文章链接&…

Spring之代理模式

1、概念 1.1 介绍 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中…

H266/VVC率失真优化与速率控制概述

率失真优化技术 率失真优化&#xff1a; 视频编码的主要目的是在保证一定视频质量的条件下尽量降低视频的编码比特率&#xff0c;或者在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下&#xff0c;为了应对不同的视频内容&#xff0c;往往有多种候选的编码方…

126基于matlab的孪生支持向量机(Twin support vector machine,TWSVM)是SVM的一种变形算法

基于matlab的孪生支持向量机&#xff08;Twin support vector machine,TWSVM&#xff09;是SVM的一种变形算法。该采用WSVM进行二分类&#xff0c;程序已注释数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 126matlabTWSVM模式识别 (xiaohongshu.com)

【Python期末】动态爬取电影Top250数据可视化处理(有GUI界面/无数据库)

诚接计算机专业编程作业(C语言、C、Python、Java、HTML、JavaScript、Vue等)&#xff0c;10/15R左右&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88713693 目录…

模拟实现strlen函数的三种方法

本文介绍&#xff1a;模拟实现strlen函数的三种方法&#xff08;指针相减&#xff0c;计数器&#xff0c;递归&#xff09; 自我介绍&#xff1a;一个脑子不好的大一学生&#xff0c;c语言接触还没到半年&#xff0c;若涉及到效率等问题&#xff0c;各位都可以在评论区提出见解…