Jade Dungeon

Nexus私服

Nexus私服的使用

安装

升级时备份配置文件:sonatype-work/nexus/conf

独立运行版的 端口号配置在conf/plexus.properties文件的application-port属性。

独立运行命令:

  • nexus start
  • nexus stop
  • nexus nexus
  • nexus restart

war包丢到容器里。

访问:

http://localhost:8080/nexus

admin/admin123

基本概念

仓库类型:

  • group
  • hosted
  • proxy
  • virtual

仓库策略(Policy):

  • Release
  • Snapshot

几个默认的仓库:

  • Central:中央库的代理
  • Apache Snapshots:Apache的代理
  • 3rd Part:第三方库的仓库
  • Releases:用户项目的仓库
  • Snapshots:用户项目的仓库

创建仓库

创建local仓库

主界面 -> 左边Repositories -> 右边的Add...按钮。主要的配置项:

  • Default Local Storage Location:本地软件仓库的路径。为空的话会默认生成为: sonatype-work/nexus/storage/repository-id/
  • Override Local Storage Location:可以配置自定义仓库目录位置。
  • Access Settings:访问控制
    • Deployment Policy:只读、不可重复部署、可重复部署。

创建Proxy仓库

  • Remote Storage Location
  • Download Remote Indexes:是否下载远程仓库索引
  • Authentication:过程仓库的认证配置。

创建仓库组

没有Release和Snapshot的区别。选择几个仓库聚合成一个虚拟仓库。

索引

对于代理仓库,打开「Download Remote Indexes」。索引中央仓库需要大量时间,在左边 导航栏的「Scheduled Tasks」中查看后台进程的进度。

对于本地仓库,右击「ReIndex」

使用私服

从私服取得包

当前文件中:

<project>
	...
	<repositories>
		<repository>
			<id>nexus</id>
			<name>Nexus</name>
			<url>http://localost:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>nexus</id>
			<name>Nexus</name>
			<url>http://localost:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
	...
</project>

setting.xml中通过Profile机制设定全局的服务器:

<settings>
	...
	<profiles>
		<profile>
			<id>nexus</id>
			<repositories>
				<repository>
					<id>nexus</id>
					<name>Nexus</name>
					<url>http://localhost:8081/nexus/content/groups/public/</url>
					<releases>
						<enabled>true</enabled>
					</releases>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</repository>
			</repositories>
	
			<pluginRepositories>
				<pluginRepository>
					<id>nexus</id>
					<name>Nexus</name>
					<url>http://localost:8081/nexus/content/groups/public/</url>
					<release>
						<enabled>true</enabled>
					</release>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
	</profiles>
	
	<activeProfiles>
		<acitveProfile>nexus</acitveProfile>
	</activeProfiles>
	...
</settings>

这样会同时使用中央服务器和私服。如果想要禁用中央服务器,可以用一个镜像。镜像 会代替中央服务器:

<settings>
	...
	<mirrors>
		<mirror>
			<id>nexus</id>
			<mirrorOf>*</mirrorOf>
			<url>http://localhost:8081/nexus/content/groups/public</url>
		</mirror>
	</mirrors>

	<profiles>
		<profile>
			<id>nexus</id>
			<repositories>
				<repository>
					<id>central</id>
					<url>http://central</url>
					<releases>
						<enabled>true</enabled>
					</releases>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</repository>
			</repositories>
	
			<pluginRepositories>
				<pluginRepository>
					<id>nexus</id>
					<url>http://central</url>
					<releases>
						<enabled>true</enabled>
					</releases>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
	</profiles>
	
	<activeProfiles>
		<acitveProfile>nexus</acitveProfile>
	</activeProfiles>
	...
</settings>

上面因为已经有镜像代替中央服务器,所以原来中央服务器的地址是什么已经不重要了。

通过maven上传到私服

日常快照版本发现到Snapshot仓库,正式发布版本发布到Release仓库中。POM中配置的 例子:

<project>
	...
	<distributionManagement>
		<repository>
			<id>nexus-releases</id>
			<name>Nexus Releases Repository</name>
			<url>http://localhost:8081/nexus/content/repositories/releases</url>
		</repository>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<name>Nexus Snapshots Repository</name>
			<url>http://localhost:8081/nexus/content/repositories/snapsots</url>
		</snapshotRepository>
	</distributionManagement>
	...
</project>

Nexus仓库一般对匿名用户是只读的,所以还要在settings.xml加上认证信息:

<settings>
	...
	<servers>
		<server>
			<id>nexus-releases</id>
			<username>admin</username>
			<passowrd>*****</passowrd>
		</server>
		<server>
			<id>nexus-snapshots</id>
			<username>admin</username>
			<passowrd>*****</passowrd>
		</server>
	</servers>
	...
</settings>

手动部署第三方包到Nexus

有些软件包是不能公开的仓库里的,比如ORACLE的驱动。这些东西手动把包放到自己的 私服上去。

选一个local的仓库,比如3rd part,然后选择下方的「Artifact Upload」选项卡。

确认坐标的方法有两个:

  • 如果是通过Maven构建的可以在GAV Definition下拉中选from POM;
  • 不然就选择GAV Parameters。

管理权限

用户与权限

已经存在的用户:

  • admin / admin123
  • deployment / deployment123
  • anonymous

重要的角色:

  • UI: Basic UI Privileges
  • UI: Repository Browser
  • UI: Search
  • Repo: All Repositories(Read)
  • Repo: All Repositories(Full Control)

为项目分配独立的仓库

  • 为项目foo建立仓库Foo Snapshot和Foo Release。
  • 仓库的具体增删改查操作由Repository Target建立,其实就是一系列正则表达式。
  • 左边面板的「Views/Repositories」->「Repository Target」可以看到各种目标。
  • 「Security」->「Privileges」下是各种权限,点add。设置仓库、Repository Target。
  • 建立一个新的权限。
  • 然后建立Role,给角色加上权限。
  • 再给用户加上角色。

Nexus任务调度

左边导航栏的 Scheduled Tasks。任务类型有:

  • Download Indexes
  • Empty trash
  • Evict Unused Proxied Items From Repository Caches:删除里长期没用到的包
  • Expire Repository Caches:组件过期重新更新
  • Publih Indexs
  • Purge Nexus Timeline:发布成其他Nexus组件或是m2eclipse可以使用的格式
  • Rebuild Maven Metadata Files
  • Reindex Repositories
  • Remove Snapshots from Repostoriy
  • Synchronize Shadow Repository:同步兼容Maven1的仓库