搭建maven私服

maven

maven简介

什么是maven?

Maven这个单词来自于意第绪语(犹太语),意为知识的积累

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

maven发展历史

image-20221224185057578

maven的体系结构

image-20221224185416654

maven安装配置

maven下载与配置

下载maven

访问网站 https://maven.apache.org

image-20221225193053478

image-20221225193358873

image-20221225194023576

image-20221225194143162 image-20221225194219474

image-20221225194307487

maven本地配置

打开conf\settings.xml文件

本地仓库位置

配置本地仓库的位置

<localRepository> 本地地址 <localRepository>

image-20221231100718551

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  -->
    <localRepository>C:\maven-repository</localRepository>
镜像配置

由于中央仓库在境外,网络访问不稳定,故在开发过程中大多配置中央仓库的镜像仓库。

image-20221231101418977

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>central</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>
profile

配置maven默认使用的jdk环境。

image-20221231101536919

<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>

idea环境安装配置maven

在idea中打开File/Settings

image-20221231101822894

image-20221231101900757

配置本地maven
image-20221231102009662 image-20221231102529368

image-20221231102643931

maven核心思想

maven仓库

image-20221224210030934

maven生命周期

image-20221224185546095

maven项目对象模型(pom)

image-20221224185644952

dependency

image-20221224205636197

依赖Scope配置。

序列依赖范围(Scope)对于主代码classpath有效对于测试代码classpath有效被打包,对于运行时classpath有效案例
1compileyesyesyeslog4j
2testyesjunit
3providedyesyesservlet-api
4runtimeyesJDBC Driver Implementtion

maven私服-nexus

下载安装

下载nexus

访问官网: https://help.sonatype.com/repomanager3/product-information/download

image-20221230152153312

由于网络不稳定,下载问题,我选择其它版本nexus-3.40.1-01-unix.tar.gz

image-20221230153020740

上传到linux服务器

image-20221230153444955image-20221230153518060

image-20221230153722055

解压并重名名

解压nexus-3.40.1-01-unix.tar.gz

tar -zxvf nexus-3.40.1-01-unix.tar.gz

image-20221230154026909

image-20221230154059471

nexus配置

进入nexus-3.40.1/bin文件夹

image-20221230154506369

image-20221230154534475
编辑nexus.vmoptions文件

根据自己机器内存大小,适当配置内存。内存太小未来启动nexus会失败。

vim nexus.vmoptions

image-20221230155224205
配置端口

默认端口为8081,如果需要在要在文件中配置端口。(如果不需改端口,此处可以忽略)

  • 进入etc文件夹

    image-20221230155555257
  • 修改nexus-default.properties文件

    image-20221230155709022

    image-20221230155804893

运行nexus

启动nexus

image-20221230155940806

运行命令**./nexus start**

image-20221230160054424
开放linux的8081端口
  • 检查系统开放的端口号

    firewall-cmd --list-ports

    image-20221230160447791
  • 添加8081端口

    firewall-cmd --zone=public --add-port=端口号/tcp --permanent

    image-20221230160812191
  • 重新加载防火墙

    firewall-cmd --reload

    image-20221230160826381
查看nexus的运行状态

在浏览器中输入http://102.168.0.101:8081

image-20221230161445094

image-20221230161508314

修改管理员密码
  • 查看管理员账户密码

    1. 进入sonatype-work\nexus3文件夹

      image-20221230205551738
    2. 查看管理员密码

      image-20221230205629156
  • 修改管理员密码

    1. 浏览器登录nexus

      image-20221230205922783

    2. 修改密码

      image-20221230210005734

      image-20221230210125712

      image-20221230210220617

      image-20221230210254339


配置私有仓库

nexus中默认仓库

maven-releases (Version policy=Release)默认只允许上传不带SNAPSHOT版本尾缀的包,默认部署策略是Disable redeploy 不允许重复上传相同版本号信息的jar,避免包版本更新以后使用方无法获取到最新的包。

maven-snapshots (Version policy=Snapshot)只允许上传带SNAPSHOT版本尾缀的包,默认部署策略是Allow redeploy,允许重复上传相同版本号信息的jar,每次上传的时候会在jar的版本号上面增加时间后缀信息。

maven-central 中央仓库的拷贝,如果环境可以访问中央仓库,则可以获取到相关的包,否则没用

maven-public 仓库组,不是实际个一个仓库地址,只是将现有的组合到一次,可以通过它看到所属组内全部仓库的jar信息

image-20221230210907451

创建自定义仓库

image-20221230211115408

image-20221230211211724

选择maven2(hosted)

image-20221230211532124

image-20221230211800395

添加新建仓库到maven-public群组中
  • 选中maven-public群组,之后访问maven-public就可以访问自己的私有仓库了。

    image-20221230212044626

  • 创建三个仓库,wnhz-repository(混合拍照&发布), wnhz-releases(发布版), wnhz-snapshots(拍照班)

    image-20231022164215854

    照片版(测试版/开发版)

    image-20231022164542564

    发布版
    在这里插入图片描述

    混合版

在这里插入图片描述

  • 添加仓库到群组maven-public群组中

    image-20231022165333619

在这里插入图片描述

批量上传本地文件到自定义仓库中

上传本地仓库内容到linux服务器
image-20221230213556643

image-20221230213627584

编辑批量上传脚本

在本地仓库上传的文件夹(maven-repository)下创建一个shell脚本,命名 localrepository.sh

  • 创建脚本

    touch localrepository.sh

    image-20221230215900056
  • 编辑脚本

    vim localrepository.sh

    #!/bin/bash
    while getopts ":r:u:p:" opt; do
        case $opt in
            r) REPO_URL="$OPTARG"
            ;;
            u) USERNAME="$OPTARG"
            ;;
            p) PASSWORD="$OPTARG"
            ;;
        esac
    done
      
    find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
    

    image-20221230220027490

添加权限

给脚本localrepository.sh添加执行权限

chmod +x localrepository.sh

image-20221230220208762
导入本地仓库到nexus私有仓库

执行以下命令

./localrepository.sh -u nexus用户名 -p nexus密码 -r 仓库地址(自定义存储混合依赖的)

 ./localrepository.sh -u admin -p 123 -r http://192.168.198.128:8081/repository/wnhz-repository/

在这里插入图片描述

在这里插入图片描述

image-20221230220912896

image-20231022165629991

项目中引用nexus库

在maven的conf/settings.xml中配置server

在settings中配置snapshots,releases和wnhz-repository服务用户名密码

注意:id必须唯一,项目pom中引用的是这个指定id。

 <servers>
    <!-- server
     | Specifies the authentication information to use when connecting to a particular server, identified by
     | a unique name within the system (referred to by the 'id' attribute below).
     |
     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
     |       used together.
     |
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    -->

    <!-- Another sample, using keys to authenticate.
    <server>
      <id>siteServer</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>optional; leave empty if not used.</passphrase>
    </server>
    -->
  	<server>
  		<id>wnhz</id>
  		<username>admin</username>
  		<password>123</password>
  	</server>
    <server>
      <id>wnhz-release</id>
      <username>admin</username>
      <password>123</password>
    </server>
    <server>
      <id>wnhz-snapshots</id>
      <username>admin</username>
      <password>123</password>
    </server>
  </servers>

在这里插入图片描述

在maven中配置镜像

中央仓库的资源从阿里云访问,其它资源来自nexus私服。

image-20221231104454031

  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.   
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
   
     -->
   <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>central</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>wnhzmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>蜗牛杭州的maven私服仓库</name>
      <url>http://192.168.198.128:8081/repository/maven-public/</url>
    </mirror>
  </mirrors>

私服访问地址从下图获取:http://192.168.198.128:8081/#browse/browse:maven-public

image-20231022170313546

项目中配置发布管理

在项目的pom.xml文件中添加<distributionManagement>

   <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${project.druid.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <distributionManagement>
        <snapshotRepository>
            <id>wnhz-snapshots</id>
            <url>http://192.168.198.128:8081/repository/wnhz-snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>wnhz-releases</id>
            <url>http://192.168.198.128:8081/repository/wnhz-releases/</url>
        </repository>
    </distributionManagement>

    <repositories>
        <repository>
            <id>nexus</id>
            <url>http://192.168.198.128/repository/wnhz-repository/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

部署项目

在maven中运行部署,部署(deploy)项目到私服。

在这里插入图片描述

在这里插入图片描述

项目中maven配置

<parenta>

继承父项目模块

<parent>
    <artifactId>wnhz-bm</artifactId>
    <groupId>com.wnhz.bm</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

当前模块坐标

<modelVersion>4.0.0</modelVersion>
<groupId>com.wnhz.bm.common</groupId>
<artifactId>bm-common</artifactId>
<packaging>pom</packaging>

packaging配置

序列参数解释
1pom表示父类型
2jar打包为jar包
3war打包为war包

module

配置项目的子模块名称

<modules>
    <module>bm-common</module>
    <module>bm-domain</module>
    <module>bm-book</module>
</modules>

properties

定义依赖的版本号

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <druid.version>1.2.18</druid.version>
</properties>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${druid.version}</version>
</dependency>

dependencies

引入依赖

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>${druid.version}</version>
    </dependency>
</dependencies>

build

构建项目模块

插件
编译插件
 <!-- 编译源代码插件 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>
打包源码插件
   <build>
        <plugins>
            <!-- 编译源代码插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <!-- 打包源代码插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <configuration>
                    <attach>true</attach>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
springboot打包插件

打包将jar包放到项目的更目录out下。

image-20231225190022695

   <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <outputDirectory>../../out</outputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

私服配置

distributionManagement

部署管理,适用于依赖上传

   <snapshotRepository>
            <id>wnhz-snapshots</id>
            <url>http://192.168.201.81:8081/repository/wnhz-snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>wnhz-releases</id>
            <url>http://192.168.201.81:8081/repository/wnhz-releases/</url>
        </repository>
repositories

部署依赖下载

  <repositories>
        <repository>
            <id>nexus</id>
            <url>http://192.168.201.81:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

ory/wnhz-snapshots/


wnhz-releases
http://192.168.201.81:8081/repository/wnhz-releases/


#### repositories

> 部署依赖下载

```xml
  <repositories>
        <repository>
            <id>nexus</id>
            <url>http://192.168.201.81:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

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

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

相关文章

20231228在Firefly的AIO-3399J开发板的Android11使用Firefly的DTS配置单前后摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11使用Firefly的DTS配置单前后摄像头ov13850 2023/12/28 19:20 缘起&#xff0c;突然发现只能打开前置的ov13850&#xff0c;或者后置的ov13850。 但是不能切换&#xff01; 【SDK&#xff1a;rk3399-android-11-r20211216.tar.xz】…

[Angular] 笔记 25:指令

组件指令 (chatgpt 回答) 在 Angular 中&#xff0c;组件本身可以被视为指令&#xff0c;这种指令被称为组件指令。组件是 Angular 应用的构建块之一&#xff0c;它封装了一段具有特定功能和特性的用户界面&#xff0c;并且可以在应用中重复使用。 组件指令具有以下特征&…

docker小白第十天

redis集群主从容错切换案例 3主3从的redis集群&#xff0c;某个主机宕机了&#xff0c;需要对应的从机补位。 docker exec -it redis-node-1 /bin/bash # 进入容器1的命令行 redis-cli -p 6381 # 进入节点1的命令行 cluster nodes # 查看集群信息可以看到1号和6号对应是主从关…

【PXIE301-208】基于PXIE总线架构的Serial RapidIO总线通讯协议仿真卡

板卡概述 PXIE301-208是一款基于3U PXIE总线架构的Serial RapidIO总线通讯协议仿真卡。该板卡采用Xilinx的高性能Kintex系列FPGA作为主处理器&#xff0c;实现各个接口之间的数据互联、处理以及实时信号处理。板卡支持4路SFP光纤接口&#xff0c;支持一个PCIe x8主机接口&…

Pearson correlation coefficient (Pearson’s r) 皮尔森相关系数

此图用的是箱状图&#xff0c;的纵轴是“Pearson’s r”&#xff0c;是实际观测值与机器学习模型预测值之间的相关性 Pearsons f得分&#xff0c;它是一个统计量&#xff0c;用来衡量两个变量之间线性相关性的强度。这个得分可能是用来衡量实际观测值与机器学习模型预测值之间的…

App Inventor 2 接入短信服务,实现短信验证码功能

发送短信验证码功能一般都是基于短信平台提供的sdk进行调用&#xff0c;这里是基于阿里云短信平台进行的开发&#xff0c;阿里云短信平台接入步骤请点此参考。 App Inventor 2拓展提供的函数如下&#xff1a; 主要提供2个函数&#xff0c;生成随机位数的数字随机码 和 发送短信…

ctfshow 新手必刷菜狗杯 谜之栅栏题解记录

知识点&#xff1a;图片比较 拿到之后&#xff0c;有两个图片&#xff0c;直观看不出什么&#xff0c;尝试用工具比较。 用010editor打开其中一个&#xff0c;010editor的工具里面就有比较文件选项&#xff0c;比较两个文件&#xff0c;发现有一处不同。题目说栅栏&#xff0c…

《QDebug 2023年12月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Q_REVISION 标记的信号槽或者 REVISION 标记的属性&#xff0c;在子类中访问 Q_REVISION 是 Qt 用来做版本控制的一个宏。以 QQuickWindow 为例&#xff0c;继承后去访问 REVISION 标记的 opacity 属性或者 Q_REVISION…

keil5修改默认配色方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. 找到Keil_5\UV4路径下的两个文件2. 修改global.prop文件中的内容第一种 配色方案第二种 配色方案第三种 配色方案第四种 配色方案 最后 前言 提示&#xff…

GPT3.5 改用 GPT4 价格翻了30倍 如何破局? GPT 对话成本推演

场景介绍 假设你搭建了一个平台&#xff0c;提供 ChatGPT 3.5 的聊天服务。目前已经有一批用户的使用数据&#xff0c;想要测算一下如果更换 GPT 4.0 服务需要多少成本&#xff1f; 方案阐述 如果是全切&#xff0c;最简单粗暴的方案就是根据提供 ChatGPT 3.5 消费的金额乘…

【FileZilla】FileZilla的使用及主动模式与被动模式----图文并茂详细讲解

目录 一 FileZilla的简介 1.1 是什么 1.2 应用场景 二 FileZilla的安装及准备工作 2.1 下载安装 2.2 主机连接VMware 三 FileZilla使用 3.1 内部连接文件管理 3.1.1 添加组 3.1.2 添加用户 3.1.3 添加用户密码 3.1.4 添加用户权限 3.1.5 连接测试 3.2 外部连接文…

Solidworks学习笔记

本内容为solidworks的学习笔记&#xff0c;根据自己的理解进行记录&#xff0c;部分可能不正确&#xff0c;请自行判断。 学习视频参考&#xff1a;【SolidWorks2018视频教程 SW2018中文版软件基础教学知识 SolidWorks自学教程软件操作教程 sw视频教程 零基础教程 视频教程】 h…

游戏软件缺少d3dcompiler.dll文件的多种修复方法分享

在操作系统中&#xff0c;d3dcompiler.dll是一个非常重要的组件&#xff0c;主要负责DirectX图形技术的编译和解析。许多用户在安装或使用某些软件时&#xff0c;提示“缺少d3dcompiler.dll”。这个错误通常出现在游戏或应用程序运行时&#xff0c;它会导致程序无法正常启动或运…

【linux】tail的基本使用

在linux可以用find查找一个文件&#xff0c;可以用grep查找符合要求的文件内容&#xff0c;但是有的时候希望查看文件的前几行或者后几行&#xff08;其实这种场景经常可以遇到&#xff0c;比如接触到日志分析的时候&#xff09;&#xff0c;那就应该使用head和tail这两个工具了…

CentOS 7 实战指南:目录操作命令详解

写在前面 想要在 CentOS 7 系统下更高效地进行目录操作吗&#xff1f;不要犹豫&#xff0c;在这里我为你准备了一篇精彩的技术文章&#xff01;这篇文章将带您深入了解 CentOS 7 下目录操作相关命令的使用方法。无论您是新手还是有一定经验的用户&#xff0c;这篇文章都将为您…

认识计算机网络——计算机网络的组成

计算机网络是由多个计算机和网络设备组成的系统&#xff0c;通过通信协议实现数据传输和信息交换。它是现代社会信息技术的重要支撑&#xff0c;广泛应用于各个领域。本文将介绍计算机网络的主要组成部分&#xff0c;包括硬件设备、软件协议和网络服务。 一、硬件设备 计算机网…

emacs:Searching for program: No such file or directory,sml;

首先&#xff0c;编辑一个现有的或新的 SML 文件&#xff08;如果没有其他方便的方法&#xff0c;可尝试C-x C-f test.smlC-x C-f test.sml 创建一个新文件&#xff09;。你会看到 Emacs 窗口底部的模式显示从 "基本"&#xff08;或其他任何模式&#xff09;变成了 S…

【Redis-10】Redis集群的实现原理和实践

Redis集群是Redis提供的分布式数据库方案&#xff0c;通过分片来进行数据共享&#xff0c;实现复制和故障转移的功能。 1. Redis集群节点 一个Redis集群由多个节点组成&#xff0c;多个节点可以通过命令实现连接&#xff0c;由独立状态转为集群状态&#xff0c;命令是cluster …

Python开源项目月排行 2023年12月

Python 趋势月报&#xff0c;按月浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当前月份内相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 …

回顾2023,我的编程学习之旅

文章目录 前言我与C语言初识C语言简易扫雷游戏二进制的美妙神奇的指针强大的结构体灵活的动态内存管理总结 我与竞赛我与CSDN结语 前言 6月8号高考结束了&#xff0c;虽然还没有出分&#xff0c;但是也大致规划好自己想学什么专业了&#xff0c;没错就是计算机&#xff0c;出分…
最新文章