一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通。事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存下来,然后每次就需要手动的上传,不方便极了。我听了之后,一方面确实因为各种忙碌没有抽开时间,但另一方面,则是每当打开私服面对着满屏的英文时,我都觉得眼前私服毕竟还能用,就不折腾了。

转载于http://www.eryajf.net/1851.html

直到偶然一个契机,在网上看到一篇介绍nexus3.x的文章,文章写得也比较清晰,我也有兴致细读下去,就这样,开启了我的nexus3私服之旅。

开始我以为这个只是针对maven私服而存在的工具,后来才发现它所支持的,竟然将运维日常所面临的各种私服都包括了,这就极大的引发了我的钻研兴致,从maven私服的研究开始,一发不可收拾的,就又写出了一个nexus3系列教程,涵盖了安装,配置,maven私服,maven私服从2.x到3.x的迁移,docker私服,npm私服,yum私服,纵观全网络,大概也找不到一个人如此这般的,倾尽所有的,知无不言的,言无不尽的将nexus3作为一个系列写成文章的了。而现在,如果再有人与我说起私服的事情,至少我不会跑了,或许更想停下来了,,,哈哈。这就是付出学习所给人带来的心境上的转化!

前言啰嗦几句,愿您在这个小系列中,学习愉快!

想要查看本系列其他文章:请点此处跳转

希望正在读这段话的你能够在这个小系列中获得自信以及喜悦!

当我摸清了使用nexus3来作为docker的私服了之后,发现再去创建maven的私服,简直不要太简单。事实上正是如此,如果你也从docker私服配置那篇文章过来的,那么,这篇文章基本上不看就能自己配置了。

配置之前,我们先来看看系统默认创建的都有哪些?

其中圈起来的都是系统原有的,用不到,就全删掉,重新创建。

老规矩,开始创建。

1,创建blob存储。

2,创建hosted类型的maven。

点击 Repository下面的 Repositories – Create repository – maven2(hosted) :

  • Name: 定义一个名称maven-local
  • Online: 勾选。这个开关可以设置这个maven repo是在线还是离线。
  • Maven2:这里有三种方式,Releases、SNAPSHOT、Mixed。
  • Releases: 一般是已经发布的Jar包
  • Snapshot: 未发布的版本
  • Mixed:混合的

这里不做设置,默认即可。

  • Storage
  • Blob store,我们下拉选择前面创建好的专用blob:maven-use。

  • Hosted
    开发环境,我们运行重复发布,因此Delpoyment policy 我们选择Allow redeploy。这个很重要!

整体配置截图如下:

3,创建一个proxy类型的maven仓库。

proxy的功能就是代理中央Maven仓库,当PC访问中央库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。
这样的优势只要其中一个人从中央库下来了,以后大家都是从Nexus私服上进行下来,私服一般部署在内网,这样大大节约的宽带。
  • Name: proxy-maven
  • Maven 2: 不设置,使用默认。
  • Proxy
      Remote Storage: 远程仓库地址,这里填写:

https://repo1.maven.org/maven2/

  • Storage: maven-use。

整体配置截图如下:

4,创建一个group类型的maven仓库。

group类型的maven仓库,是一个聚合类型的仓库。它可以将前面我们创建的2个仓库聚合成一个URL对外提供服务,可以屏蔽后端的差异性,实现类似透明代理的功能。后面通过一些配置,大家可能会对这个group有更加深入的了解。
  • Name:group-maven
  • Storage:选择专用的blob存储maven-use。
  • group : 将左边可选的2个仓库,添加到右边的members下。

整体配置截图如下:

这样配置以后,我们就可以使用了。

5,验证使用。

使用起来其实非常简单,就是在测试机器上安装maven工具,然后再其配置当中,将地址指向我们的私服地址,然后编译项目,这个时候就会通过私服来拉取jar包了,以后再编译的时候,就可以直接从本地私服拉取了。

现在找一台测试机器,进行验证。

1,安装jdk。

因为maven依赖于jdk,所以要先安装jdk。我们先通过curl 192.168.106.10/a | sh来安装jdk。

2,安装maven。

同样,通过 curl 192.168.106.10/a | sh 来安装maven。

3,更改maven的配置。

将项目编译依赖地址指向改成私服的配置,需要通过更改maven的配置实现,也就是更改maven/conf/settings.xml的仓库地址。

说实话,我尝试安装一个全新的maven,从而通过修改配置来实现走私服拉取依赖,但是,经过这样的操作,我失败了。

因此这里将现役正用的配置拿出来,仅修改其中的核心处(私服链接)吧:

然后修改其中的第165行为我新建的私服地址,这个地址可以在私服当中如下位置看到:

修改之后如下:

4,拉取项目编译。

拉取之后,进到项目里边,开始编译。

请注意,这个时候,我们的group里边是空空如也的。

那么接下来开始编译:

  1. mvn install -e

接下来就会进入各种依赖下载的界面,我简单截了一小段如下:

这个时候我们可以明白,其实我新搭建的仓库里边是空的,那么这会儿的流程就是经由group,转向我们配置的proxy,私服在通过proxy拉取远程的jar,然后再经由group,反馈给当前的项目。

去私服里看看:

可以看到刚刚编译过程中所下载的jar,都如我们所想的呈现在了group当中,明明是通过proxy下载的远程jar,为何可以在group里边看到呢,我想,这就是我刚刚说的,group的妙处所在吧。

不过最后这里编译并没有通过,报错信息如下:

  1. [ERROR] Failed to execute goal on project 51fbadmin-common: Could not resolve dependenciesfor project com.ald.fanbei.admin:51fbadmin-common:jar:1.0.0: Could not find artifact com.third:google.guava:jar:14.0.1 in nexus-osc (http://192.168.157.110:8081/repository/group-maven/) -> [Help 1]
  2. org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project 51fbadmin-common: Could not resolve dependencies for project com.ald.fanbei.admin:51fbadmin-common:jar:1.0.0: Could not find artifact com.third:google.guava:jar:14.0.1 in nexus-osc (http://192.168.157.110:8081/repository/group-maven/)
  3. at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:221)
  4. at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:127)
  5. at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:245)
  6. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:199)
  7. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
  8. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
  9. at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
  10. at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
  11. at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
  12. at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
  13. at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
  14. at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
  15. at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
  16. at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
  17. at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
  18. at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
  19. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  20. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  21. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  22. at java.lang.reflect.Method.invoke(Method.java:498)
  23. at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
  24. at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
  25. at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
  26. at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
  27. Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project com.ald.fanbei.admin:51fbadmin-common:jar:1.0.0: Could not find artifact com.third:google.guava:jar:14.0.1 in nexus-osc (http://192.168.157.110:8081/repository/group-maven/)
  28. at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:211)
  29. at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:195)
  30. ... 23 more
  31. Caused by: org.eclipse.aether.resolution.DependencyResolutionException: Could not find artifact com.third:google.guava:jar:14.0.1 in nexus-osc (http://192.168.157.110:8081/repository/group-maven/)
  32. at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:384)
  33. at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:205)
  34. ... 24 more
  35. Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not find artifact com.third:google.guava:jar:14.0.1 in nexus-osc (http://192.168.157.110:8081/repository/group-maven/)
  36. at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
  37. at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
  38. at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:367)
  39. ... 25 more
  40. Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact com.third:google.guava:jar:14.0.1 in nexus-osc (http://192.168.157.110:8081/repository/group-maven/)
  41. at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:39)
  42. at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:355)
  43. at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
  44. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  45. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  46. at java.lang.Thread.run(Thread.java:748)
  47. [ERROR]
  48. [ERROR] Re-run Maven using the -X switch to enable full debug logging.
  49. [ERROR]
  50. [ERROR] For more information about the errors and possible solutions, please read the following articles:
  51. [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
  52. [ERROR]
  53. [ERROR] After correcting the problems, you can resume the build with the command

可以看到是缺少com.third:google.guava:jar:14.0.1这个包,由于服务器不能FQ,因此下载失败,导致编译终止。

但是,maven私服的基本框架已经搭成,当某一些jar无法下载的时候,一般情况下的解决办法都是通过手动下载,然后再手动上传到私服当中。

而我们公司老的私服当中其实是有的,因此,如何将老的包迁移,就成了不得不面对的问题。这个问题,留待下回分解

<三>企业级开源仓库nexus3实战应用–使用nexus3配置maven私有仓库的更多相关文章

  1. 使用Nexus配置Maven私有仓库

    使用Nexus配置Maven私有仓库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装配置Nexus 1>.下载nexus 下载地址:https://www.sonat ...

  2. 实战maven私有仓库三部曲之三:Docker下搭建maven私有仓库

    本章是<实战maven私有仓库>系列的第三篇,在前两章中,我们先在linux搭建maven私有仓库,然后在开发环境使用此仓库,本章我们在docker下快速搭建maven私有仓库,然后像前面 ...

  3. 架构实战项目心得(四):使用Nexus配置Maven私有仓库

    一.安装配置Nexus 1.  下载nexus https://www.sonatype.com/download-oss-sonatype 2.  解压:tar -zxfnexus-3.5.2-01 ...

  4. 3.使用nexus3配置maven私有仓库

    配置之前,我们先来看看系统默认创建的都有哪些 其中圈起来的都是系统原有的,用不到,就全删掉,重新创建. 1,创建blob存储 2,创建hosted类型的maven 点击 Repository下面的 R ...

  5. nexus3使用docker运行/创建docker私有仓库/maven私有仓库

    version: '3.2' services: nexus3: container_name: nexus3 hostname: nexus3 image: sonatype/nexus3:3.14 ...

  6. 实战maven私有仓库三部曲之二:上传到私有仓库

    在上一章<实战maven私有仓库三部曲之一:搭建和使用>我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体 ...

  7. 实战maven私有仓库三部曲之一:搭建和使用

    在局域网内搭建maven私有仓库,可避免每次都从中央仓库下载公共jar包,另外将A模块作为二方库发布到私有仓库后,B模块可以很方便的引用,今天我们就来实战maven私有仓库的搭建和使用: 原文地址:h ...

  8. 使用nexus3.10搭建maven私有仓库

    使用nexus3.10搭建maven私有仓库-----详见如下链接-- --此贴用于笔记 https://blog.csdn.net/vipbupafeng/article/details/80232 ...

  9. 如何在云服务器创建maven私有仓库

    参考链接:https://blog.csdn.net/silence_jjj/article/details/77531916 nexus3创建maven私有仓库(windows) 1.官网:http ...

随机推荐

  1. iOS pthread

    pthread 是属于 POSIX 多线程开发框架 创建线程的方法:pthread_create   参数含义: 1.指向线程代号的指针 2.线程的属性 3.指向函数的指针 4.传递给该函数的参数 返 ...

  2. SQLServer之创建主XML索引

    创建主XML索引注意事项 若要创建主 XML 索引,请使用 CREATE INDEX (Transact-SQL) Transact-SQL DDL 语句. XML 索引不完全支持可用于非 XML 索 ...

  3. git、github、gitlab之间的关系

    GIt-版本控制工具:GitHub-一个网站平台,提供给用户空间存储git仓储,保存用户的一些数据文档或者代码等:GitLab - 基于Git的项目管理软件. Git分布式版本控制系统 Git是一款自 ...

  4. 多节点,多线程下发订单,使用zookeeper分布式锁机制保证订单正确接入oms系统

    假设订单下发, 采用单机每分钟从订单OrderEntry接口表中抓100单, 接入订单oms系统中. 由于双十一期间, 订单量激增, 导致订单单机每分钟100单造成, 订单积压. 所以采用多节点多线程 ...

  5. python小白——进阶之路——day1天---认识python和变量、注释

    ###-python的认知 89年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido) (1)版本: python2.x原码不规范,重复较多 python3x:原码 ...

  6. open-falcon自定义push数据无法在grafana显示

    使用open-falcon自定义push数据,在open-falcon中数据能正常显示,而在grafana中添加监控项时却无法显示. 由上述现象可判断可能是由于open-falcon的api组件有问题 ...

  7. 使用BigQuery分析GitHub上的C#代码

    一年多以前,Google 在GitHub中提供了BigQuery用于查询的GitHub上的开源代码(open source code on GitHub available for querying) ...

  8. xshell中进入PLSQL命令不能使用方向键和退格键的做法(输入后显示乱码)

    解决输入退格键为乱码的情况 输入时可以ctrl+backspace进行强制退格,或者使用下面一种方法: 在xshell的连接属性中配置,如下图红圈部分:  彻底解决方向键和退格键的一种办法(未亲测) ...

  9. 软工+C(6): 最近发展区/脚手架

    // 上一篇:工具和结构化 // 下一篇:野生程序员 教育心理学里面有提到"最近发展区"这个概念,这个概念是前苏联发展心理学家维果茨基(Vygotsky)提出的,英文名词是Zone ...

  10. Flutter之CustomView

    文中所有示例代码请点击: gitee.com/yumi0629/Fl… 今天呢,我小拉面主要想给大家讲一讲Flutter中的 Slivers 大家族的使用场景和方法.开发过列表布局的同学们应该对 Sl ...