百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

做开发这么久了,还不会搭建服务器Maven私有仓库?这也太Low了吧

ccwgpt 2024-12-18 14:45 32 浏览 0 评论

大家好,我是冰河~~

最近不少小伙伴想在自己公司的内网搭建一套Maven私服环境,可自己搭建的过程中,或多过少的总会出现一些问题,问我可不可以出一篇如何搭建Maven私服的文章。这不,就有了这篇文章嘛。

好了,其他的不多说了,接下来,我们就一起来搭建Maven私服环境吧!

环境说明

  • 环境:CentOS 6.x~8.0、 JDK8、 Sonatype Nexus、 Maven
  • IP:192.168.50.131
  • root 用户操作

安装Nexus

前提:已安装 JDK8 并配置好了环境变量,小伙伴们自行搭建JDK8环境,这里我就不再赘述了。相信小伙伴们都能够正确搭建JDK8环境。

下载Nexus

下载Nexus(这里,我使用的是:nexus-2.11.2-03-bundle.tar.gz) ,下载地址:http://www.sonatype.org/nexus/go/ ,我们也可以在服务器的命令行输入如下命令下载nexus-2.11.2-03-bundle.tar.gz安装文件。

# wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.2-03-bundle.tar.gz

也可以到链接:https://download.csdn.net/download/l1028386804/12523592 下载

解压Nexus

# mkdir nexus
# tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C nexus
# cd nexus
# ls
nexus-2.11.2-03 sonatype-work
(一个 nexus 服务,一个私有库目录)

编辑 Nexus

编辑 Nexus 的 nexus.properties 文件,配置端口和 work 目录信息(保留默认)

# cd nexus-2.11.2-03
# ls
bin conf lib LICENSE.txt logs nexus NOTICE.txt tmp

查看目录结构, jetty 运行

# cd conf
# vi nexus.properties
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus
# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF

编辑 nexus 脚本,配置 RUN_AS_USER 参数

# vi /usr/local/nexus/nexus-2.11.2-03/bin/nexus
#RUN_AS_USER=

改为:

RUN_AS_USER=root

防火墙中打开 8081 端口

# vi /etc/sysconfig/iptables

添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT

保存好后重启防火墙

# service iptables restart

启动 nexus

# /usr/local/nexus/nexus-2.11.2-03/bin/nexus start
****************************************
WARNING - NOT RECOMMENDED TO RUN AS usr/local
****************************************
Starting Nexus OSS...
Started Nexus OSS.

访问nexus

浏览器中打开:http://192.168.50.131:8081/nexus/

登录nexus

默认用户名admin,默认密码admin123。

到此, Nexus 已安装完成, 接下来是 Nexus 的配置

Nexus 配置(登录后)

设置管理员邮箱

菜单 Administration/Server 配置邮箱服务地址(如果忘记密码,可以通过该邮箱找回密码)

设置用户邮箱

给用户配置邮箱地址,方便忘记密码时找回:

用户修改密码

仓库类型

  • group 仓库组:Nexus通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库;
  • hosted 宿主仓库:主要用于发布内部项目构件或第三方的项目构件 (如购买商业的构件)以及无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)proxy 代理仓库:代理公共的远程仓库;
  • virtual 虚拟仓库:用于适配 Maven 1;

一般用到的仓库种类是什么 hosted、 proxy。

Hosted 仓库常用类型说明:

  • releases 内部的模块中 release 模块的发布仓库
  • snapshots 发布内部的 SNAPSHOT 模块的仓库
  • 3rd party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去

如果构建的 Maven 项目本地仓库没有对应的依赖包,那么就会去 Nexus 私服去下载,如果Nexus私服也没有此依赖包,就回去远程中央仓库下载依赖,这些中央仓库就是 proxy。Nexus 私服下载成功后再下载至本地 Maven 库供项目引用。

设置 proxy 代理仓库

设置 proxy 代理仓库(Apache Snapshots/Central/Codehaus Snapshots)准许远程下载,如下所示。

Maven 本地库的安装与配置

下载Maven

链接http://maven.apache.org/download.cgi 下载Maven

配置Maven环境变量

vim /etc/profile

MAVEN_HOME=/usr/local/maven
JAVA_HOME=/usr/local/jdk
CLASS_PATH=$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
export JAVA_HOME MAVEN_HOME CLASS_PATH PATH

source /etc/profile

配置本地Maven

拷贝Maven的conf目录下的配置文件settings.xml,重命名为settings-lyz.xml,修改配置文件后的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>D:/Maven_Repository/.m2/repository</localRepository>
 <interactiveMode>true</interactiveMode>
    <offline>false</offline>
    <pluginGroups>
        <pluginGroup>org.mortbay.jetty</pluginGroup>
        <pluginGroup>org.jenkins-ci.tools</pluginGroup>
    </pluginGroups>
 
 <!--配置权限,使用默认用户-->
 <servers>
  <server>
   <id>nexus-releases</id>
   <username>deployment</username>
   <password>deployment123</password>
  </server>
  <server> 
   <id>nexus-snapshots</id>
   <username>deployment</username>
   <password>deployment123</password>
  </server>
 </servers>
 
    <mirrors>
 
    </mirrors>
 
 <profiles>
  <profile>
     <id>lyz</id>
       <activation>
                    <activeByDefault>false</activeByDefault>
                    <jdk>1.8</jdk>
                </activation>
       <repositories>
     <!-- 私有库地址-->
        <repository>
      <id>nexus</id>
      <url>http://192.168.50.131:8081/nexus/content/groups/public/</url>
      <releases>
       <enabled>true</enabled>
      </releases>
      <snapshots>
       <enabled>true</enabled>
      </snapshots>
     </repository>
    </repositories>      
    <pluginRepositories>
     <!--插件库地址-->
     <pluginRepository>
      <id>nexus</id>
      <url>http://192.168.50.131:8081/nexus/content/groups/public/</url>
      <releases>
       <enabled>true</enabled>
      </releases>
      <snapshots>
       <enabled>true</enabled>
        </snapshots>
     </pluginRepository>
    </pluginRepositories>
   </profile>
 </profiles>
 
 <!--激活profile-->
 <activeProfiles>
  <activeProfile>lyz</activeProfile>
 </activeProfiles>

</settings>

其中,配置文件中的

<localRepository>D:/Maven_Repository/.m2/repository</localRepository>

说明本地仓库位于D:/Maven_Repository/.m2/repository目录下。

配置文件中的如下配置项。

<url>http://192.168.50.131:8081/nexus/content/groups/public/</url>

与下图中的链接一致:

配置Eclipse Maven

配置IDEA Maven

项目的构建与发布

首先我们要在项目的pom.xml文件中加入如下内容,将项目构建成的Jar发布到Maven私有仓库

<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://192.168.50.131:8081/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://192.168.50.131:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

配置说明

项目中的pom.xml文件中,如果版本配置如下:

<version>0.0.1-SNAPSHOT</version>

则发布到Maven私有仓库后对应的目录如下:

如果版本配置如下:

<version>0.0.1-RELEASE</version>

则发布到Maven私有仓库后对应的目录如下。

完整pom.xml文件的配置如下所示。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>common-utils-maven</groupId>
    <artifactId>com.chwl.common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Release Repository</name>
            <url>http://192.168.50.131:8081/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://192.168.50.131:8081/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jdk.version>1.8</jdk.version>
    </properties>
    <dependencies>
       此处省略....
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.2</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

具体发布步骤如下:

右键pom.xml->Run as->Maven build->

上图中的私有库为空,我们右键pom.xml->Run as->Maven build(此时pom.xml文件的version为0.0.1-SNAPSHOT)。

构建完毕后

说明已经将项目构建并发布到了我们的Maven私有仓库。

此时,上图中的Release目录为空,此时,我们修改pom.xml的version为0.0.1-RELEASE,再次右键pom.xml->Run as->Maven build,构建项目,此时发布的目录如下图:

说明已经将项目构建并发布到了我们的Maven私有仓库。

最后,我们添加第三方的Jar依赖到我们的Maven私有仓库,具体操作如下:

如上图,第三方依赖私有仓库为空,我们按照以下步骤上传第三方依赖到我们的Maven私有仓库。

如上图,第三方依赖已经上传到我们的Maven私有仓库。

至此,Maven 私有库和本地库的安装与配置到此结束。

好了,今天就到这儿吧,我是冰河,我们下期见~~

相关推荐

ForkJoinPool的了解与使用(fork-join)

ForkJoinPool是一个强大的Java类,用于处理计算密集型任务。使用ForkJoinPool分解计算密集型任务并并行执行它们以获得更好的Java应用程序性能。它的工作原理是将任务分解为更小的子...

Netty 时间轮源码解析(时间轮java实现)

定时任务在中间件和业务系统中有很多应用,比如:注册中心中定期上报状态的心跳机制。RPC框架中定期扫描请求列表移除超时请求。延迟队列提交未来时间的任务。业务系统每日凌晨跑批处理或报表任务。Java原...

Autodesk基于Mesos的通用事件系统架构

【编者按】本文由AutodeskCloud软件架构师OlivierPaugam撰写,解释了如何集合Mesos、Kafka、RabbitMQ、Akka、Splunk、Librato、EC2等基础设施...

全局视角看技术-Java多线程演进史

作者:京东科技文涛全文较长共6468字,语言通俗易懂,是一篇具有大纲性质的关于多线程的梳理,作者从历史演进的角度讲了多线程相关知识体系,让你知其然知其所以然。前言2022年09月22日,JDK19发...

为什么应该使用Dapr来构建事件驱动的微服务?

微服务架构从本质上来说是分布式的。构建微服务总是会遇到极具挑战性的问题,比如说弹性服务调用、分布式事务处理、按需扩容以及严格一次(exactly-once)的消息处理。将微服务放在Kubernet...

WEB前端开发学习流程(web前端开发简明教程)

相对web后端开发来说,web前端开发对大部分初学编程者比较友好,而且入门门槛低,就业范围广。是大部分转行学IT的一个首选方向。web前端开发工程师,主要进行网站浏览器的开发、优化、布局的工作。在了解...

《s24z 编程指南》大纲(AI 提示词)

由于AIGC的迅速发展,本教程《s24z编程指南》,尝试用如下方法:准备《编程指南》的大纲,按章节划分,每小节由相关知识点和文字组成。每次将一小部分文本,以提示词的形式,送入Kimi或Ch...

有哪些常用的Python后端开发框架?

以下为你介绍一些常用的Python后端开发框架,包含各自的特点、适用场景与示例代码:Flask特点:轻量级、灵活,核心代码简洁,几乎不强制开发者使用特定的工具和库,开发者可按需添加扩展。适用场景...

数学分析的结构(数学分析的结构方法)

一、基础结构层实数系统与集合论数学分析的根基建立在实数连续之上,通过集合论(如公理化集合论)定义数学对象的抽象结构。例如,实数集的完备性公理是数学分析区别于其他数学分支的关键特征。此外,点集拓扑学(如...

新手在学习Web前端时需要学习的内容汇总

Web前端开发因为入行门槛低,是很多人转行IT开发行业的首选,但想要成为一名合格的Web前端开发工程师同样要具备过硬的专业技能,而且想要学成后高薪快速的就业,过硬的技术是基本条件。那么,新手小白学习W...

基于 Kotlin KMP 实现 HarmonyOS 与 Android 双平台 SDK 开发实践

背景随着鸿蒙平台的进一步发展,大家的态度也逐渐从观望转向实际投入,越来越多的公司开始考虑将自家应用迁移到鸿蒙平台。但是这一过程并非想象中的那么简单,尤其对于已经存在很多年的大型项目来说,直接投入大量人...

爱奇艺 App 中台技术实践(爱奇艺 app 中台技术实践在哪)

本文来自爱奇艺研究员在ArchSummit全球架构师峰会上的演讲整理,将为大家分享爱奇艺打造移动中台的过程。爱奇艺移动中台的建设过程可分为组件解耦、组件定制化和平台化,未来会利用平台发现、沉淀和复...

软件开发|同样的功能需求,为什么有的软件公司报价高?有的低?

最近有个朋友问我:同样的功能需求,为什么有的公司报价高?有的公司报价低?其实,有很多创业的朋友,在寻找技术开发公司的时候,经常会遇到这个困惑,一样的功能需求,不同的公司有不同的报价,有的差别还很大,那...

零基础要怎么学习Web前端?Web前端学习路径分享

Web前端因为薪资高、入行门槛低,成为很多人转行进入IT行业的首选。对于零基础的人来说,学习之前一定要想清楚为什么而学习Web前端,给自己一个清晰的定位,摆正心态。如果还不清楚学习路线,可以参考千锋武...

MICROCHIP/微芯 KSZ9031RNXIA 以太网芯片

特征o适用于IEEE802.3应用的单片10/100/1000Mbps以太网收发器oGMII/MII标准接口,3.3V/2.5V/1.8V容错I/Oo自动协商以自动选择最高链路连接速度(10/10...

取消回复欢迎 发表评论: