<三>企業級開源倉庫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-localOnline
: 勾選。這個開關可以設置這個maven repo是在線還是離線。Maven2
:這里有三種方式,Releases、SNAPSHOT、Mixed。
- Releases: 一般是已經發布的Jar包
- Snapshot: 未發布的版本
- Mixed:混合的
這里不做設置,默認即可。
Storage
Blob store,我們下拉選擇前面創建好的專用blob:maven-use。
Hosted
-
開發環境,我們運行重復發布,因此Delpoyment policy 我們選擇Allow redeploy。這個很重要!
整體配置截圖如下:
3,創建一個proxy類型的maven倉庫。
這樣的優勢只要其中一個人從中央庫下來了,以后大家都是從Nexus私服上進行下來,私服一般部署在內網,這樣大大節約的寬帶。
Name
: proxy-mavenMaven 2
: 不設置,使用默認。Proxy
-
Remote Storage: 遠程倉庫地址,這里填寫:
https://repo1.maven.org/maven2/
Storage
: maven-use。
整體配置截圖如下:
4,創建一個group類型的maven倉庫。
Name
:group-mavenStorage
:選擇專用的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里邊是空空如也的。
那么接下來開始編譯:
- mvn install -e
接下來就會進入各種依賴下載的界面,我簡單截了一小段如下:
這個時候我們可以明白,其實我新搭建的倉庫里邊是空的,那么這會兒的流程就是經由group,轉向我們配置的proxy,私服在通過proxy拉取遠程的jar,然后再經由group,反饋給當前的項目。
去私服里看看:
可以看到剛剛編譯過程中所下載的jar,都如我們所想的呈現在了group當中,明明是通過proxy下載的遠程jar,為何可以在group里邊看到呢,我想,這就是我剛剛說的,group的妙處所在吧。
不過最后這里編譯並沒有通過,報錯信息如下:
- [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]
- 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/)
- at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:221)
- at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:127)
- at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:245)
- at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:199)
- at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
- at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
- at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
- at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
- at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
- at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
- at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
- at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
- at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
- at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
- at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
- at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
- at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
- at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
- at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
- 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/)
- at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:211)
- at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:195)
- ... 23 more
- 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/)
- at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:384)
- at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:205)
- ... 24 more
- 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/)
- at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
- at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
- at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:367)
- ... 25 more
- 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/)
- at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:39)
- at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:355)
- at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
- at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
- at java.lang.Thread.run(Thread.java:748)
- [ERROR]
- [ERROR] Re-run Maven using the -X switch to enable full debug logging.
- [ERROR]
- [ERROR] For more information about the errors and possible solutions, please read the following articles:
- [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
- [ERROR]
- [ERROR] After correcting the problems, you can resume the build with the command
可以看到是缺少com.third:google.guava:jar:14.0.1
這個包,由於服務器不能FQ,因此下載失敗,導致編譯終止。
但是,maven私服的基本框架已經搭成,當某一些jar無法下載的時候,一般情況下的解決辦法都是通過手動下載,然后再手動上傳到私服當中。
而我們公司老的私服當中其實是有的,因此,如何將老的包遷移,就成了不得不面對的問題。這個問題,留待下回分解