研究了一下Maven的私有仓库,大部分都是使用Nexus,然后去官网看了一下nexus的版本,最新的是3.5
支持的私有仓库类型也很丰富了:docker、yum、maven、npm等等
因为是安装在docker容器里面,所以下载了Unix的版本,但是下载速度很慢,应该是和墙有关
下载的过程中就先整理了一下dockerfile文件
FROM centos:centos7 #安装ssh和supervisor RUN yum install -y openssh-server sudo syslog-ng RUN yum install -y hostname wget java-1.8.0-openjdk.x86_64 #SSH服务配置 RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' ADD nexus-3.5.0-02-unix.tar.gz /usr/local/ RUN sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config RUN sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config #复制服务启动脚本并设置权限 ADD run.sh /usr/local/sbin/run.sh RUN chmod 755 /usr/local/sbin/run.sh #开放80端口 EXPOSE 80 22 8081 CMD ["/usr/local/sbin/run.sh"]
在run.sh中添加了启动nexus的命令,默认端口是8081,需要做一个端口映射,maven的默认仓库路径是/usr/local/sonatype-work/nexus3/blobs/default,所以也需要做一个volume的映射
因为是使用阿里云的容器,所以这些配置都在页面做了,如果自己启动docker run的话道理是一样的
下面就是Nexus的使用了,首先访问管理页面默认端口是8081,目前映射到了1111
使用默认用户登录admin/admin123登录后可以在管理配置界面对Nexus进行设置:
这些设置包括:仓库设置、安全设置、监控信息、系统信息等,对于一般使用来说在安全设置中编辑或添加角色用户信息已经足够了,如果对安全性要求比较高可以配置证书
在这里我们使用了默认角色,新建了个人用户并停用了admin和Anonymous账号
主要来看一下仓库的设置,如上图所示默认的Blob Stores是仓库的默认存储路径,不可修改不可删除,即:/usr/local/sonatype-work/nexus3/blobs/default这个目录,我们已经通过volume参数映射到了宿主机上
这样即使nexus有升级更新容器也不会影响仓库中的文件
而对于仓库的配置,目前nexus中的maven仓库可以配置三种:代理仓库、主机仓库、组仓库(英语水平一般,其实是proxy、hosts、group),这三种类型的代表分别是:maven-central、maven-release、maven-public
maven-central:代理库,目的就是在配置好maven后可以从官网获取最新的jar包,以私有仓库作为代理
maven-release:本地库,目标是在项目中开发产生的自由jar根据配置可以放到本地库中进行版本管理以及供其他开发人员获取调用
maven-public:组仓库,可以把多个代理库和本地库放到一个组中,这样就可以通过这种方式保证获取所有形式的jar包了
在开发人员的本地仓库中的setting.xml中可以这样配置:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <pluginGroups></pluginGroups> <proxies></proxies> <servers> <server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> <mirrors> <mirror> <id>nexus-releases</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-snapshots</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/nexus/content/groups/public-snapshots</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>nexus-releases</id> <url>http://nexus-releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>nexus-snapshots</id> <url>http://nexus-snapshots</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus-releases</id> <url>http://nexus-releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> <pluginRepository> <id>nexus-snapshots</id> <url>http://nexus-snapshots</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
idea中配置pom文件:
<distributionManagement> <!-- 两个ID必须与 setting.xml中的<server><id>nexus-releases</id></server>保持一致--> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://localhost:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://localhost:8081/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>