项目管理工具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;
    }

    @Override
    public 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 {
    @Override
    public 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();

    @Override
    public 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();

    @Override
    protected 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>
  
效果如下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP文件代码加密系统,可批量全开源

代码文件加密系统 在程序运行时&#xff0c;实质上是在执行机器码&#xff0c;而虚拟机语言的基本概念是将程序加密到一定程度&#xff0c;也就是说&#xff0c;经过加密的PHP程序在执行时会被解密成opcode继续执行。 PHP在执行时会生成opcode&#xff0c;然后由Zend虚拟机继…

克服幻觉:提升语言模型在自然语言处理中的准确性与可靠性

随着语言模型&#xff08;LLM&#xff09;在自然语言处理&#xff08;NLP&#xff09;中的应用日益普及&#xff0c;它们在文本生成、机器翻译、情感分析等许多任务中展现出惊人的能力。然而&#xff0c;这些模型也常常显示出一个被称作“幻觉”&#xff08;hallucination&…

37%规则,最优停止问题(麦穗理论)

近期又看到37%规则&#xff0c;又叫麦穗理论&#xff0c;有很多惊人的发现。 感觉像黄金分割&#xff0c;但又欠那么一点点1-0.6180.38238.2%。 有意思的是&#xff0c;有一个数学奖&#xff0c;叫菲尔兹奖&#xff0c;只将给不超过40岁的人。如果人能活100岁&#xff0c;那么…

springcloud微服务分布式 springboot+vue的轻院校园网购商城管理系统 Eureka

本文的研究目标是以商城的轻院网购商城管理体系为对象&#xff0c;论文的研究内容包括&#xff1a;商品信息、系统公告等方面进行了研究。系统以当前应用最为广泛的Java语言为基础&#xff0c;结合了目前应用最为广泛的嵌入式嵌入式平台&#xff0c;集成了B/S体系结构。数据库选…

Java分布式锁理论(redis、zookeeper) 详解

目录 一、分布式锁有哪些应用场景&#xff1f; 二、分布式锁的实现方案 三、zookeeper实现分布式锁 一直不释放锁怎么办&#xff1f; 如何避免分布式锁羊群效应问题&#xff1f; 四、redis实现分布式锁 一、分布式锁有哪些应用场景&#xff1f; 1、定时任务 2、秒杀抢购…

前端性能优化之图像优化

图像优化问题主要可以分为两方面&#xff1a;图像的选取和使用&#xff0c;图像的加载和显示。 图像基础 HTTP Archive上的数据显示&#xff0c;网站传输的数据中&#xff0c;60%的资源都是由各种图像文件组成的&#xff0c;当然这些是将各类型网站平均的结果&#xff0c;单独…

二分查找(一)

算法原理 原理&#xff1a;当一个序列有“二段性”的时候&#xff0c;就可以使用二分查找算法。 适用范围&#xff1a;根据规律找一个点&#xff0c;能将这个数组分成两部分&#xff0c;根据规律能有选择性的舍去一部分&#xff0c;进而在另一个部分继续查找。 除了最普通的…

ROS-机器人仿真urdf-rviz、xacro

文章目录 一、urdf集成rviz1.1 基本流程1.2 优化 rviz 启动 二、urdf语法详解2.1 robot2.2 link2.3 joint2.4 urdf练习2.5 urdf工具 三、URDF优化_xacro3-1 Xacro_语法详解3-2 Xacro_完整使用流程示例3- Xacro_实操 一、urdf集成rviz 1.1 基本流程 需求描述: 在 Rviz 中显示一…

simulink代码生成(四)——SCI模块:接收模块

首先&#xff0c;实现DSP28335的自收自发&#xff1b; 添加串口收发模块&#xff1b; 设置参数&#xff0c;根据硬件选择串口模块&#xff1a; 配置中断触发&#xff1b;SCIB的接收中断的CPU中断号为9&#xff0c;PIE级中断为3&#xff1b; 因此如下配置&#xff1b; 代码生成…

认识Git

&#x1f30e;初识Git 初识Git 什么是Git Git的安装       Centos平台安装Git       Ubuntu平台安装Git Git的基本操作       创建远程仓库       配置Git 认识工作区、暂存区与版本库       添加文件到暂存区       将暂存区文件提交至本…

如何进行sql优化?

在日常工作中都避免不了要和各种SQL语句打交道&#xff0c;无论是开发还是后期维护&#xff0c;一条执行效率高的SQL语句都会对系统性能产生巨大影响。那么&#xff0c;如何进行有效的SQL优化呢&#xff1f;下面将为大家深入浅出地讲解SQL优化的各个方面&#xff1a; 1、了解数…

WorkPlus AI助理为企业提供智能客服的机器人解决方案

在数字化时代&#xff0c;企业面临着客户服务的重要挑战。AI客服机器人成为了提升客户体验和提高工作效率的关键工具。作为一款优秀的AI助理&#xff0c;WorkPlus AI助理以其智能化的特点和卓越的功能&#xff0c;为企业提供了全新的客服机器人解决方案。 为什么选择WorkPlus A…

格密码基础:光滑参数

目录 一. 铺垫高斯函数 二. 光滑参数图形理解 三. 光滑参数与格基本区 3.1 高斯与均匀分布的统计距离 3.2 光滑参数理解 四. 光滑参数与最短向量 五. 光滑参数与连续最小值 六. 光滑参数与对偶格的上界 七. 光滑参数与格的上界 八. 小结 一. 铺垫高斯函数 定义高斯密…

MIT 6.s081 实验解析——labs2

系列文章目录 MIT 6.s081 实验解析——labs1 MIT 6.s081 实验解析——labs2 文章目录 系列文章目录测试判断流程System call tracingsysinfo![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ab9ca34f1fc64b6aa1df74613dc1a397.png) 测试判断流程 完成代码后将.c文…

K8S Prometheus-rocketmq-exporter配置

下载rocketmq-exporter 通过Docker仓库下载 docker pull sawyerlan/rocketmq-exporter:latest 然后打标签&#xff0c;推送到自己的仓库 也可通过代码自己build镜像 git clone GitHub - apache/rocketmq-exporter: Apache RocketMQ Prometheus Exporter 然后打标签&#x…

iPhone 恢复出厂设置后如何恢复数据

如果您在 iPhone 上执行了恢复出厂设置&#xff0c;您会发现所有旧数据都被清除了。这对于清理混乱和提高设备性能非常有用&#xff0c;但如果您忘记保存重要文件&#xff0c;那就是坏消息了。 恢复出厂设置后可以恢复数据吗&#xff1f;是的&#xff01;幸运的是&#xff0c;…

React Portals

简介 React Portal 可以将组件渲染到dom树的不同位置&#xff0c;同时可以渲染到任意父级元素&#xff0c;可以实现漂浮层功能。 使用样例 本篇文章通过React Portals实现对话框&#xff0c;下面将会给出具体实现。 protal组件 Portal.jsx import {useState} from "re…

Java环境准备:JDK与IDEA

新手小白学Java–环境准备篇 文章目录 新手小白学Java--环境准备篇第1节 JDK的下载与安装第2节 IDEA的下载与安装第3节 使用IDEA创建第一个Java项目第4节 使用小技巧查看电脑的操作系统版本显示出文件的后缀名IDEA 修改字体大小IDEA 修改显示主题色IDEA 修改单行注释的颜色IDEA…

Mysql SQL审核平台Yearning本地部署

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用…

Postman实现压力测试

从事软件开发对于压力测试并不陌生,常见的一些压测软件有Apache JMeter LoadRunner Gatling Tsung 等,这些都是一些比较专业的测试软件,对于我的工作来说一般情况下用不到这么专业的测试,有时候需要对一些接口进行压力测试又不想再安装新软件,那么可以使用Postman来实现对…