Sonatype Nexus的安裝配置參見:CentOS系統中安裝Nexus並匯入已有的構件庫。Nexus內建了Jetty容器,${NEXUS_HOME}/bin/jsw目錄下包含了各個作業系統的啟動指令碼。當然,如果你不喜歡內建的Jetty容器,也可以下載Nexus的war包,部署在tomcat等容器中。
安裝部署後,比較重要的是能夠對其進行深入的管理和配置,本文將介紹一些關於Sonatype Nexus的高階配置技巧,方便您進行配置管理。
1、使用Maven上傳元件注意事項
- host型別的倉庫才允許上傳元件
- 倉庫需要開啟允許上傳功能,配置選項中的Deployment Policy選擇“Allow Redeploy”,見下圖
- Nexus使用者必須具有“Artifact Upload”的許可權,Nexus內建了一些角色,比如“Nexus Deployment Role”,就可以上傳元件
- Maven主配置檔案中需要配置使用者資訊及上傳的倉庫資訊,配置示例如下:
-
<server> <id>thirdparty</id> <username>deployment</username> <password>password</password> </server>
2、修改監聽埠
預設情況下,Nexus監聽埠8081。可以通過以下方法更改這個埠。
- 停止Nexus
- 編輯${NEXUS_HOME}/conf/plexus.properties檔案,修改applicationPort的值
- 重啟Nexus。
3、使Nexus支援其它格式的包
Nexus預設支援jar、war、pom、ejb、ear、rar、par等型別的包,如果希望能新增一些其它型別的包,可以配置如下:
在${nexus-work}/conf/packaging2extension-mapping.properties配置檔案中增加配置:
my-custom-packaging=myextension
如果該配置檔案不存在則手動建立該檔案。
4、更新倉庫索引
1)強制更新索引
nexus索引經常會出現與遠端倉庫索引不一致的情況,導致某些包不能正常下載,可以強制更新倉庫索引,保持索引同步:
- 以管理員身份登入
- 右鍵點選倉庫,選擇Expire Cache
- 右鍵點選倉庫,選擇Update Index
2)定時更新索引
- 以管理員身份登入
- 左側導航欄選擇Administration->Scheduled Tasks
- 點選add新增一個計劃任務
- 任務型別選擇:Update Repositories Index,Repository/Group選擇要更新的倉庫,Recurrence選擇計劃任務的週期型別
5、除錯元件下載過程
如果Nexus本地索引中包含元件,但是卻不能下載,可能的原因如下:
- 包含元件的元件庫不在group型別的元件庫中
- 路由規則封鎖了元件的下載
Nexus提供了可以除錯元件下載過程的方法,在元件的下載全路徑後面增加引數“?describe”,示例如下:
http://localhost:8081/nexus/content/groups/public/foo/bar/1.0/bar-1.0.jar?describe
Nexus將會以json的形式返回撥試的輸出結果,結果主要包括:
- 元件的地址
- 元件是否可以找到以及原因
- 如果能找到元件,統計查詢元件的過程
示例返回結果如下:
{
"data":{
"requestUrl":"http://localhost:8081/nexus/content/groups/public/test/project/1.0/project-1.0.jar?describe",
"processingTimeMillis":471,
"request":{
"requestUrl":"http://localhost:8081/nexus/content
/groups/public/test/project/1.0/project-1.0.jar?describe",
"requestPath":"/test/project/1.0/project-1.0.jar",
"requestContext":[
"request.received.timestamp=1276286536595",
"request.address=0:0:0:0:0:0:0:1%0",
"request.remoteOnly=false",
"request.url=http://localhost:8081/nexus/content/groups/public/test/project/1.0/project-
1.0.jar?describe",
"request.localOnly=false",
"request.appRootUrl=http://localhost:8081/nexus"
]
},
"response":{
"responseType":"NOT_FOUND",
"processedRepositoriesList":[
"public",
"snapshots",
"thirdparty",
"central",
"java.net-m2",
"java.net-m1-m2",
"google",
"apache-snapshots",
"codehaus-snapshots"
],
"appliedMappings":[
"public repository applied [11b647d6117038d8=
[type=EXCLUSION, groupId=public, patterns=[.*/project/.*], mappedRepositories=[releases]]]"
]
}
}
}
注意檢視其中的response節點,如上例中的"responseType":"NOT_FOUND"表示未找到元件,通過該方法可以詳細排查元件不能下載的原因。
再提供一個pom型別的包“mojo-parent-30.pom”的除錯示例
{
"data": {
"requestUrl": "http://192.168.120.202:8081/nexus/content/groups/public/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom?describe",
"processingTimeMillis": 1322,
"request": {
"requestUrl": "http://192.168.120.202:8081/nexus/content/groups/public/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom?describe",
"requestPath": "/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom",
"requestContext": [
"request.remoteOnly=false",
"request.localOnly=true"
]
},
"response": {
"responseType": "FILE",
"responseActualClass": "org.sonatype.nexus.proxy.item.DefaultStorageFileItem",
"responsePath": "/groups/public/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom",
"responseUid": "central:/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom",
"originatingRepositoryId": "central",
"originatingRepositoryName": "Central",
"originatingRepositoryMainFacet": "org.sonatype.nexus.proxy.maven.MavenProxyRepository",
"processedRepositoriesList": [ ],
"properties": [
"created=1333560570000",
"modified=1333560570000",
"lastRequested=1375255131976",
"remoteChecked=1375255131556",
"remoteUrl=http://repo1.maven.org/maven2/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom",
"storedLocally=1375255131556",
"isExpired=false",
"readable=true",
"writable=true",
"virtual=false"
],
"attributes": [
"digest.md5=61a1f7765d45a51a6a7bb03bf410588f",
"digest.sha1=be742febdaa3cc7a971dacdf8cdc7ebd94b5765b",
"remote.sha1=be742febdaa3cc7a971dacdf8cdc7ebd94b5765b",
"request.address=192.168.120.121",
"request.user=anonymous",
"storageItem-checkedRemotely=1375255131556",
"storageItem-created=1333560570000",
"storageItem-expired=false",
"storageItem-generation=2",
"storageItem-lastRequested=1375255131976",
"storageItem-length=26627",
"storageItem-modified=1333560570000",
"storageItem-path=/groups/public/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom",
"storageItem-readable=true",
"storageItem-remoteUrl=http://repo1.maven.org/maven2/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom",
"storageItem-repositoryId=central",
"storageItem-storedLocally=1375255131556",
"storageItem-writable=true"
]
}
}
}