Nexus内置了Jetty容器,${NEXUS_HOME}/bin/jsw目錄下包含了各個作業系統的啟動腳本。當然,如果你不喜歡内置的Jetty容器,也可以下載下傳Nexus的war包,部署在tomcat等容器中。
安裝部署後,比較重要的是能夠對其進行深入的管理和配置,本文将介紹一些關于Sonatype Nexus的進階配置技巧,友善您進行配置管理。
Sonatype Nexus的安裝配置參見:CentOS系統中安裝Nexus并導入已有的構件庫。Nexus内置了Jetty容器,${NEXUS_HOME}/bin/jsw目錄下包含了各個作業系統的啟動腳本。當然,如果你不喜歡内置的Jetty容器,也可以下載下傳Nexus的war包,部署在tomcat等容器中。
1、使用Maven上傳元件注意事項
- host類型的倉庫才允許上傳元件
- 倉庫需要開啟允許上傳功能,配置選項中的Deployment Policy選擇“Allow Redeploy”,見下圖
Sonatype Nexus進階配置 - 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://192.168.120.202:8081/nexus/content/groups/public/org/codehaus/mojo/mojo-parent/30/mojo-parent-30.pom?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"
]
}
}
}