写在前面

十一假期期间,也有很多小伙伴不忘学习呀,看来有很多小伙伴想通过十一长假来提升自己的专业技能!这不,就有小伙伴在微信上问我:如何搭建Maven私服?让我专门推一篇搭建Maven私服的文章。安排上了,这也是我亲自验证过,在自己服务器内网一直运行的Maven私服环境。今天,我就把如何搭建Maven私服的方法分享给小伙伴们,希望能够给大家带来实质性的帮助。

小伙伴的疑问

这里,我就直接以一张图来说明小伙伴的疑问吧。

假期不忘学习的读者,日后必然是公司的栋梁之才呀!加油!

那么,接下来,我们就一起来搭建Maven私服环境吧!

环境说明

环境: CentOS 6.8、 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安装文件。

  1. # 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

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

编辑 Nexus

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

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

查看目录结构, jetty 运行

  1. # cd conf
  2. # vi nexus.properties
  3. # Jetty section
  4. application-port=8081
  5. application-host=0.0.0.0
  6. nexus-webapp=${bundleBasedir}/nexus
  7. nexus-webapp-context-path=/nexus
  8. # Nexus section
  9. nexus-work=${bundleBasedir}/../sonatype-work/nexus
  10. runtime=${bundleBasedir}/nexus/WEB-INF

编辑 nexus 脚本,配置 RUN_AS_USER 参数

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

改为:

  1. RUN_AS_USER=root

防火墙中打开 8081 端口

  1. # vi /etc/sysconfig/iptables

添加:

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

保存后重启防火墙

  1. # service iptables restart

启动 nexus

  1. # /usr/local/nexus/nexus-2.11.2-03/bin/nexus start
  2. ****************************************
  3. WARNING - NOT RECOMMENDED TO RUN AS usr/local
  4. ****************************************
  5. Starting Nexus OSS...
  6. 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环境变量

  1. vim /etc/profile
  2. MAVEN_HOME=/usr/local/maven
  3. JAVA_HOME=/usr/local/jdk
  4. CLASS_PATH=$JAVA_HOME/lib
  5. PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
  6. export JAVA_HOME MAVEN_HOME CLASS_PATH PATH
  7. source /etc/profile

配置本地Maven

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <localRepository>D:/Maven_Repository/.m2/repository</localRepository>
  6. <interactiveMode>true</interactiveMode>
  7. <offline>false</offline>
  8. <pluginGroups>
  9. <pluginGroup>org.mortbay.jetty</pluginGroup>
  10. <pluginGroup>org.jenkins-ci.tools</pluginGroup>
  11. </pluginGroups>
  12. <!--配置权限,使用默认用户-->
  13. <servers>
  14. <server>
  15. <id>nexus-releases</id>
  16. <username>deployment</username>
  17. <password>deployment123</password>
  18. </server>
  19. <server>
  20. <id>nexus-snapshots</id>
  21. <username>deployment</username>
  22. <password>deployment123</password>
  23. </server>
  24. </servers>
  25. <mirrors>
  26. </mirrors>
  27. <profiles>
  28. <profile>
  29. <id>lyz</id>
  30. <activation>
  31. <activeByDefault>false</activeByDefault>
  32. <jdk>1.8</jdk>
  33. </activation>
  34. <repositories>
  35. <!-- 私有库地址-->
  36. <repository>
  37. <id>nexus</id>
  38. <url>http://192.168.50.131:8081/nexus/content/groups/public/</url>
  39. <releases>
  40. <enabled>true</enabled>
  41. </releases>
  42. <snapshots>
  43. <enabled>true</enabled>
  44. </snapshots>
  45. </repository>
  46. </repositories>
  47. <pluginRepositories>
  48. <!--插件库地址-->
  49. <pluginRepository>
  50. <id>nexus</id>
  51. <url>http://192.168.50.131:8081/nexus/content/groups/public/</url>
  52. <releases>
  53. <enabled>true</enabled>
  54. </releases>
  55. <snapshots>
  56. <enabled>true</enabled>
  57. </snapshots>
  58. </pluginRepository>
  59. </pluginRepositories>
  60. </profile>
  61. </profiles>
  62. <!--激活profile-->
  63. <activeProfiles>
  64. <activeProfile>lyz</activeProfile>
  65. </activeProfiles>
  66. </settings>

其中,配置文件中的

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

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

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

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

与下图中的链接一致:

配置Eclipse Maven

项目的构建与发布

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

  1. <distributionManagement>
  2. <repository>
  3. <id>nexus-releases</id>
  4. <name>Nexus Release Repository</name>
  5. <url>http://192.168.50.131:8081/nexus/content/repositories/releases/</url>
  6. </repository>
  7. <snapshotRepository>
  8. <id>nexus-snapshots</id>
  9. <name>Nexus Snapshot Repository</name>
  10. <url>http://192.168.50.131:8081/nexus/content/repositories/snapshots/</url>
  11. </snapshotRepository>
  12. </distributionManagement>

配置说明

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

  1. <version>0.0.1-SNAPSHOT</version>

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

如果版本配置如下:

  1. <version>0.0.1-RELEASE</version>

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

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

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>common-utils-maven</groupId>
  5. <artifactId>com.chwl.common</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <distributionManagement>
  8. <repository>
  9. <id>nexus-releases</id>
  10. <name>Nexus Release Repository</name>
  11. <url>http://192.168.50.131:8081/nexus/content/repositories/releases/</url>
  12. </repository>
  13. <snapshotRepository>
  14. <id>nexus-snapshots</id>
  15. <name>Nexus Snapshot Repository</name>
  16. <url>http://192.168.50.131:8081/nexus/content/repositories/snapshots/</url>
  17. </snapshotRepository>
  18. </distributionManagement>
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <jdk.version>1.8</jdk.version>
  22. </properties>
  23. <dependencies>
  24. 此处省略....
  25. </dependencies>
  26. <build>
  27. <plugins>
  28. <plugin>
  29. <groupId>org.apache.maven.plugins</groupId>
  30. <artifactId>maven-compiler-plugin</artifactId>
  31. <configuration>
  32. <source>${jdk.version}</source>
  33. <target>${jdk.version}</target>
  34. <encoding>${project.build.sourceEncoding}</encoding>
  35. </configuration>
  36. </plugin>
  37. <plugin>
  38. <groupId>org.apache.maven.plugins</groupId>
  39. <artifactId>maven-source-plugin</artifactId>
  40. <version>2.1.2</version>
  41. <executions>
  42. <execution>
  43. <id>attach-sources</id>
  44. <goals>
  45. <goal>jar</goal>
  46. </goals>
  47. </execution>
  48. </executions>
  49. </plugin>
  50. </plugins>
  51. </build>
  52. </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 私有库和本地库的安装与配置到此结束。

重磅福利

微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!

另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!!

小伙伴问我:如何搭建Maven私服?我连夜肝了这篇实战文章!!的更多相关文章

  1. 搭建Maven私服那点事

    摘要:本文主要介绍在CentOS7.1下使用nexus3.6.0搭建maven私服,以及maven私服的使用(将自己的Maven项目指定到私服地址.将第三方项目jar上传到私服供其他项目组使用) 一. ...

  2. Anroid 搭建Maven私服(Android Studio)

    一.场景 ① 公司中有多个项目,多人开发,开发中的某一模块需要被其他几个项目的模块所依赖,最简单粗暴的方式就是打包成aar或者jar文件逐个拷贝到libs下进行依赖,可是这种方式太过于麻烦,而且需要每 ...

  3. Linux下使用Nexus搭建Maven私服

    在开发过程中,有时候会使用到公司内部的一些开发包,显然把这些包放在外部是不合适的.另外,由于项目一直在开发中,这些内部的依赖可能也在不断的更新.可以通过搭建公司内部的Maven服务器,将第三方和内部的 ...

  4. 搭建Maven私服

    最近从SVN下载的代码,在本地构建时出现了诸多问题,部分依赖下载超时,就想起在局域网搭建Maven私服,废话不说了,在测试服务器上建的已经成功,就随便找台机子再练习一遍顺道写个日志.1.前往http: ...

  5. Maven学习 (四) 使用Nexus搭建Maven私服

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  6. Maven-004-使用 Nexus 搭建 maven 私服

    从去年至今,自己一直在学习自动化测试工具,想利用自动化工具尽可能的将重复的.关键的.耗时耗力的工作实现自动化,减轻日常测试工作,提升测试效率.在学习的过程中,将 maven 作为了项目开发管理工具,进 ...

  7. Ubuntu server下搭建Maven私服Nexus

    Ubuntu server下搭建Maven私服Nexus Maven私服Nexus的作用,主要是为了节省资源,在内部作为maven开发资源共享服务器来使用. 1.下载 通过root用户进去Ubuntu ...

  8. Maven使用笔记(五)Sonatype Nexus 搭建Maven 私服

    1. 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地, 而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载 ...

  9. Maven——使用Nexus搭建Maven私服

    原文:http://www.cnblogs.com/xdp-gacl/p/4068967.html Maven学习总结(九)--使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要 ...

随机推荐

  1. SQL语句中IF的简单使用 - 关联leetcode 627.交换工资

    MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 & ...

  2. XMLHttpRequest 简单封装

    当开发简单页面的时候,不需要引入任何js库,这时需要封装一个用到 XMLHttpRequest 对象的好用的接口请求. simple 封装如下 ajaxRequest({ url: '', metho ...

  3. android 数据绑定(4)实用特性及疑惑:使用控件、格式化@string/xxx、对象传递、双向数据绑定

    1.在布局内使用其它控件 1.1 效果 箭头所指3个控件的内容随输入框内容而变化. 1.2 示例代码 <?xml version="1.0" encoding="u ...

  4. 【基础知识】Unity查漏补缺

    最近发现了一些平时不太注重的知识点,特此建立个专题,把零散的东西.疏忽的东西临时记录下来. Mecanim动画系统: 1)设置AnimatorController时,如果某个动作播放不正常. 首先打开 ...

  5. Lua 调用的 C 函数保存 state 的两种方式: Storing State in C Functions 笔记

    http://yanbin.is-programmer.com/posts/94214.html Registery的Key 1. 整数Key用于Lua的引用机制,所以不要使用整数作为Key 2. 通 ...

  6. Lua C API的正确用法

    http://blog.codingnow.com/2015/05/lua_c_api.html http://blog.csdn.net/oilcode/article/details/510861 ...

  7. App性能测试前需要了解的内存原理

    这两天在研究性能中内存方面的一块,网上也零散看了挺多文章,写得很细但是感觉不够整体,所以这篇算是总结一下吧,当个复习资料. 那么这里个人分为两个大部分,第一部分应用内的内存管理,主要是oom的理解,G ...

  8. MaterialPropertyBlock

    在unity中,有这样一种情形,有许多的物体,都使用了相同的材质球,但是呢,具体的细节又有些微的不同,如果想要些微的改变每一个 网格的颜色,改变 渲染状态是不行的. 这时,就可以使用MaterialP ...

  9. 06_Python异常处理机制

    1.异常概述 1.什么是错误: 错误是指有逻辑或语法等导致一个程序无法正常执行的问题     2.什么是异常: 异常时程序出错时标识的一种状态,程序不会向下执行而转去调用此函数的地方等待处理错误并恢复 ...

  10. netty如何进行单元测试

    一种特殊的Channel 实现——EmbeddedChannel,它是Netty 专门为改进针对ChannelHandler 的单元测试而提供的. 将入站数据或者出站数据写入到EmbeddedChan ...