<三>企業級開源倉庫nexus3實戰應用–使用nexus3配置maven私有倉庫


<三>企業級開源倉庫nexus3實戰應用–使用nexus3配置maven私有倉庫

 
一兩個星期之前,你如果在我跟前說起私服的事情,我大概會繞着你走,因為我對這個東西真的一竅不通。事實上也正如此,開發同學曾不止一次的跟我說公司的私服版本太舊了,許多新的依賴編譯之后不會從遠程倉庫自動緩存下來,然后每次就需要手動的上傳,不方便極了。我聽了之后,一方面確實因為各種忙碌沒有抽開時間,但另一方面,則是每當打開私服面對着滿屏的英文時,我都覺得眼前私服畢竟還能用,就不折騰了。

轉載於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無法下載的時候,一般情況下的解決辦法都是通過手動下載,然后再手動上傳到私服當中。

而我們公司老的私服當中其實是有的,因此,如何將老的包遷移,就成了不得不面對的問題。這個問題,留待下回分解

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM