MicoZone-Maven

news2024/12/26 13:32:21

一、理论

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供项目构建和依赖管理支持的工具。

通过Maven管理依赖的优势:
1、通过在pom.xml中指定jar包坐标即可自动从仓库下载依赖
2、如果jar包存在子依赖会自动下载子依赖包
3、如果jar包之间存在冲突,可以通过Maven的版本仲裁机制(最短路径优先,路径相同先声明者优先)或手动添加excludes标签,排除重复的依赖

TODO依赖范围
1、compile:默认依赖范围,编译、运行时都需要,会被打入jar包
2、test:仅在测试时需要
3、runtime:运行时需要,编译时不需要,会被打入jar包,如jdbc驱动包
4、provided:编译时需要,运行时不需要,不会被打入jar包,如servlet-api

继承与聚合:
父工程打包方式要用pom,通过父工程可以定义好所有子工程的依赖。
父工程的主要标签:modules、dependencyManagement
modules可以聚合子工程,通过执行父工程的构建命令会按序执行所有聚合的子工程,避免出现子工程间存在依赖关系,而由于构建顺序导致的报错
dependencyManagement可以声明依赖版本
通过import标签实现父工程继承另一个父工程:

<dependencyManagement>
    <dependencies>
        <!-- SpringCloud 微服务 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

二、命令

mvn clean:删除target目录
mvn compile:将src/main/java目录下的Java源文件编译为.class文件输出到target目录下
mvn test:会执行src/test/java目录下的单元测试类
mvn package:jar工程打成jar包,war工程打成war包
mvn install:将package打成的jar/war包发布到本地仓库
mvn deploy:将jar包部署到远程仓库,供其他人使用

三、settings.xml

settings.xml是maven的核心配置文件

<!-- 指定本地仓库 -->
<localRepository>D:\software\maven-repository</localRepository>
<!-- Maven 下载 jar 包默认访问境外的中央仓库,速度很慢,改成阿里云提供的镜像仓库 -->
<mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<!-- 修改Java工程默认使用的JDK版本 -->
<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
       <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

四、pom.xml

pom.xml是maven工程的核心配置文件

<!-- 当前Maven工程的坐标 -->
<groupId>com.micozone</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<!-- Maven工程的打包方式,jar:jar包,war:war包,pom:父工程 -->
<packaging>jar</packaging>
<!-- 自定义属性,通过${}引用属性值 -->
<properties>
    <!-- 工程构建过程中读取源码时使用的字符集 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 当前工程依赖 -->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <!-- 配置依赖的范围 -->
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <!-- Maven自带插件,执行编译命令时使用该插件-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <!--使用定制化插件,修改Maven默认的打jar策略:生成可执行的jar包 -->
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<version>2.5.5</version>
		</plugin>
    </plugins>
</build>

五、Nexus

Nexus是Maven仓库管理软件,可以用来搭建Maven远程仓库私服。
如果本地仓库没找到,会优先从私服找,私服如果没有才会去远程仓库找。
Nexus可以创建多个仓库,仓库类型有三种:
1、proxy:代理仓库,用于代理远程仓库,如阿里仓库镜像
2、hosted:本地仓库(宿主仓库),分为发行版release和快照版snapshot,快照版指版本号带有-SNAPSHOT,从本地上传的依赖都会放到release的宿主仓库中。
3、group:仓库组,聚合代理仓库和宿主仓库,提供统一服务地址。先去宿主仓库找,如果没有找到再去代理仓库找,找到之后缓存到私服,下次就能从私服直接获取。

五.1 搭建

将 nexus-3.25.1-04-unix.tar.gz 上传至Linux服务

# 解压
tar -zxvf nexus-3.25.1-04-unix.tar.gz
# 切换到bin目录
cd /micozone/app/nexus-3.25.1-04/bin
# 执行
./nexus start
# 查看状态
./nexus status
# 登录地址:http://ip:8081   账号:admin   密码:在/micozone/app/sonatype-work/nexus3目录下

PS:
创建自定义宿主仓库时,Deployment policy 选择 Allow redeploy,这样才能上传同一个jar包的不同版本
在这里插入图片描述

五.2 使用

修改settings.xml

<servers>
  <server>
    <id>micozone-public</id>
    <username>admin</username>
    <password>jrbjrb811</password>
    </server>
</servers>
<mirrors>
  <mirror>
    <id>micozone-public</id>
    <mirrorOf>*</mirrorOf>
    <name>micozone public</name>
    <!--指定nexus上group类型的仓库-->
    <!--查询依赖的顺序:本地仓库、仓库组下的仓库、仓库组下的代理仓库指定的远程仓库地址-->
    <url>http://192.168.84.10:8081/repository/micozone-public/</url>  
  </mirror>
</mirrors>

如果要通过mvn deploy命令将本地项目的jar包部署到Nexus,需修改pom.xml

<distributionManagement>
    <repository>
        <id>micozone-public</id>
        <!--settings.xml中配置的仓库组下的release类型的宿主仓库地址-->
        <url>http://192.168.84.10:8081/repository/micozone-release/</url>
    </repository>
    <snapshotRepository>
        <id>micozone-public</id>
        <!--settings.xml中配置的仓库组下的snapshot类型的宿主仓库地址-->
        <url>http://192.168.84.10:8081/repository/micozone-snapshot/</url>
    </snapshotRepository>
</distributionManagement>

将本地jar上传至私服有两种方式,第一种是通过mvn clean deploy(前提是pom.xml中配置了distributionManagement标签),将打成的jar包上传至release类型的宿主仓库中(会同步上传至仓库组下);第二种是直接在Nexus服务器上release类型的宿主仓库下直接上传jar包。
在这里插入图片描述

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

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

相关文章

Web安全 - 服务端请求伪造SSRF(Server-Side Request Forgery)

文章目录 OWASP 2023 TOP 10SSRF 导图SSRF 概念SSRF的工作原理SSRF攻击场景SSRF防御策略1. 严格验证用户输入2. 禁用或限制对内部网络的访问3. 强制使用外部API代理4. 禁止直接访问敏感资源5. 输入内容长度限制6. 检测和监控7. 确保对HTTP请求的处理安全 SSRF防御实现方案1. 白…

【鸿蒙开发】05 登录Demo解析

文章目录 一、功能介绍 在鸿蒙开发中&#xff0c;一个完善的登录功能是许多应用程序的基础需求。本文将详细介绍一个鸿蒙 App 登录 Demo&#xff0c;包括其功能介绍、代码解析以及代码 demo 的下载地址。 本文初始代码从华为开发者网站下载&#xff0c;根据该Demo进行内容调整。…

【Fast-LIO系列】Fast-LIO、Fast-LIO2、Faster-LIO系列特点分析

【FAST-LIO】Fast-LIO系列特点分析 1. FAST-LIO核心贡献1.将IMU和Lidar特征点紧耦合在一起2.使用反向传播考虑到了运动补偿3. 基于IESKF中的 卡尔曼增益更新 K 2. FAST-LIO2核心贡献(2021年)1. 不用线&#xff0c;面特征点而使用全局点云2. 使用ikd-tree存储点云3. ikd-Tree 3.…

P3131 [USACO16JAN] Subsequences Summing to Sevens S Python题解

[USACO16JAN] Subsequences Summing to Sevens S 题目描述 Farmer John’s N N N cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to ta…

C语言 | Leetcode C语言题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {for (int i 0; i < numsSize; i) {int x (nums[i] - 1) % numsSize;nums[x] numsSize;}int* ret malloc(sizeof(int) * numsSize);*returnSize 0;for (in…

特征工程——一门提高机器学习性能的艺术

当前围绕人工智能(AI)和机器学习(ML)展开的许多讨论以模型为中心&#xff0c;聚焦于 ML和深度学习(DL)的最新进展。这种模型优先的方法往往对用于训练这些模型的数据关注不足&#xff0c;甚至完全忽视。类似MLOps的领域正迅速发展&#xff0c;通过系统性地训练和利用ML模型&…

ZYNQ: GPIO 之 MIO 控制 LED 实验

GPIO 之 MIO 控制 LED 实验目的 使用 GPIO 通过两个 MIO 引脚控制 PS 端两个 LED 的亮灭&#xff0c;实现底板上 PS_LED0、PS_LED1 两个 LED 灯同亮同灭的效果。 简介 ZYNQ PS 中的外设&#xff08;如 USB 控制器、UART 控制器、I2C 控制器以及 GPIO 等等&#xff09;可以通…

亲测无限坐席在线客服系统源码/二开版/基于ThinkPHP+搭建教程

源码简介&#xff1a; 亲测了一款实用的无限坐席在线客服系统源码&#xff0c;这可是基于ThinkPHP框架开发的二开版哦&#xff01;里面还附带了一份超详细的搭建教程。 安装过程简直不能更简单&#xff0c;只需一键操作&#xff0c;启动两个端口就搞定了。而且&#xff0c;它…

动态库的加载全过程

区分一组概念&#xff1a;逻辑地址&#xff0c;虚拟地址&#xff0c;物理地址。 逻辑地址&#xff1a;是我们的代码在编译过程&#xff0c;编译器帮对每一条代码所生成的指令所编写的地址。 物理地址&#xff1a;当程序被放入到内存中时&#xff0c;内存与每一条指令所对应的…

回执单识别-银行回单识别API-文字识别OCR API

银行回单是一种由银行提供的交易凭证&#xff0c;记录了账户资金的交易明细。它通常包括存款、取款、转账、汇款、支付等各种类型的资金往来信息。银行回单可以是纸质的&#xff0c;也可以是电子版的&#xff0c;内容详尽记录了交易的相关信息&#xff0c;具有法律效力&#xf…

CSS 效果:实现动态展示双箭头

最近写了一段 CSS 样式&#xff0c;虽然不难&#xff0c;但实现过程比较繁琐。这个效果结合了两个箭头&#xff0c;一个突出&#xff0c;一个内缩&#xff0c;非常适合用于步骤导航或选项卡切换等场景。样式不仅仅是静态的&#xff0c;还可以通过点击 click 或者 hover 事件&am…

【机器学习(五)】分类和回归任务-AdaBoost算法

文章目录 一、算法概念一、算法原理&#xff08;一&#xff09;分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost 分类损失函数5、样本权重更新6、AdaBoost 的强分类器 &#xff08;二&#xff09;回归算法基本思路1、最大误差的计算2…

JavaSE——面向对象2:方法的调用机制、传参机制、方法递归、方法重载、可变参数、作用域

目录 一、成员方法 (一)方法的快速入门 (二)方法的调用机制(重要) (三)方法的定义 (四)注意事项和使用细节 1.访问修饰符(作用是控制方法的使用范围) 2.返回的数据类型 3.方法名 4.形参列表 5.方法体 6.方法调用细节说明 (五)传参机制 1.基本数据类型的传参机制 …

C++模拟实现vector容器【万字模拟✨】

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; 学习专栏C语言_Stark、的博客-CSDN博客 项目实战C系列_Stark、的博客-CSDN博客 数据结构与算法_Stark、的博客-CSDN博客 座右铭&#xff1a;梦想是一盏明灯&#xff…

idea2023-快速搭建一个本地tomcat的javaWeb项目(从0到1保姆教学)

前言 如何在新版idea中搭建一个javaWeb项目&#xff0c;并且应用在物理的tomcat中&#xff0c;本文将进行从零到一&#xff0c;完成搭建步骤&#xff0c;以及相关注意事项的讲解。 为什么需要配置tomcat&#xff1f; 我们开发的javaWeb项目&#xff0c;最后都需要打包部署到真正…

了解华为计算产品线,昇腾的业务都有哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着 ChatGPT 的现象级爆红&#xff0c;它引领了 AI 大模型时代的深刻变革&#xff0c;进而造成 AI 算力资源日益紧缺。与此同时&#xff0c;中美贸易战的持续也使得 AI 算力国产化适配成为必然趋势。 …

Flet介绍:平替PyQt的好用跨平台Python UI框架

随着Python在各个领域的广泛应用&#xff0c;特别是在数据科学和Web开发领域&#xff0c;对于一个简单易用且功能强大的用户界面&#xff08;UI&#xff09;开发工具的需求日益增长。传统的Python GUI库如Tkinter、PyQt虽然功能强大&#xff0c;但在易用性和现代感方面略显不足…

ZYNQ:Hello World 实验-PS-串口打印“Hello World”

Hello World 实验目的 PS-串口打印“Hello World” 创建 Vivado 工程 设置工程名为“hello_world” 使用 IP Integrator 创建 Processing System 搜索栏中键入“zynq”&#xff0c;找到并双击“ZYNQ7 Processing System” 串口配置 配置完成后的 ZYNQ7 Processing Sys…

微信小程序 图片的上传

错误示范 /*从相册中选择文件 微信小程序*/chooseImage(){wx.chooseMedia({count: 9,mediaType: [image],sourceType: [album],success(res) {wx.request({url:"发送的端口占位符",data:res.tempFiles[0].tempFilePath,method:POST,success(res){//请求成功后应该返…

【C++】 vector 迭代器失效问题

【C】 vector 迭代器失效问题 一. 迭代器失效问题分析二. 对于vector可能会导致其迭代器失效的操作有&#xff1a;1. 会引起其底层空间改变的操作&#xff0c;都有可能是迭代器失效2. 指定位置元素的删除操作--erase3. Linux下&#xff0c;g编译器对迭代器失效的检测并不是非常…