前言
本来以为搭建一个nexus随随便便就好了,但是遇到了最新版本根本没办法在jdk17下面正常运行—起码我调了一下不知道怎么运行,我才知道。。。不升级版本其实是很有道理的。
这一篇是最新版本的尝试:
在ubuntu上搭建nexus私有仓库[失败草稿]
下面一篇文章让我醍醐灌顶:
解决Nexus 3.XX Jdk版本问题(亲测有效)
新的JDK不行,那我用旧的还不行吗?
版本指定:
openjdk-1.8
maven-3.6.2 (注意,maven的版本也不是越新越好的,新版本的不支持 http-- 我们搭建的nexus十有八九是没有https的。)
过程
安装jdk1.8:
apt-get install openjdk-8-jre
好了:
在官网下载 neuxs:
wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.67.1-01-unix.tar.gz
我本地下载速度有点慢,看来需要一些科技手段了。
下载完成后,请上传到服务器等待配置:
在服务器上面,解压缩:
tar -zxvf nexus-3.67.1-01-unix.tar.gz
ls
------重命名nexus文件夹
mv nexus-3.67.1-01 /usr/local/nexus3
cd /usr/local
创建软连接
sudo ln -s nexus3 nexus
mkdir /usr/local/sonatype-work/
好了,先进行一部分配置:
vim bin/nexus.vmoptions
修改一下参数,防止占用内存过大。
如下图:
可以改小一点:
修改默认访问端口以及根目录:
vim etc/nexus-default.properties
注意,默认端口8081很多人用的,使用前请检查一下是否已经占用了:
lsof -i:8081
给nexus分配账号:
ps:如果不分配账号那么是无法启动的,例如:
创建 nexus 用户
# sudo useradd nexus -M -s /sbin/nologin
注意,这条命令后续会出问题的,在我上一篇文章已经将坑都排出来了:
https://blog.csdn.net/cdnight/article/details/80673110
所以,正式的命令是新建普通的账号:
sudo useradd nexus -m -s /bin/bash
授权
chown -R nexus:nexus /usr/local/nexus
chown -R nexus:nexus /usr/local/sonatype-work/
打开 /usr/local/nexus/bin/nexus.rc 文件, 去掉 run_as_user 变量的注释
sudo vim /usr/local/nexus/bin/nexus.rc
run_as_user="nexus"
好了,测试一下能否正常运行:
/usr/local/nexus/bin/nexus run
结果:
这怕是jdk版本的问题了。。。
怎么做都不行,下面参考一下一位兄弟的文章:
解决Nexus 3.XX Jdk版本问题(亲测有效)
所以,nexus的新版本必须使用jdk1.8,刚刚下载的openjdk1.8就是在这里用的
在nexus脚本上面覆盖jdk位置:
就是:
-- 添加这一行上去。
INSTALL4J_JAVA_HOME_OVERRIDE="/usr/lib/jvm/java-1.8.0-openjdk-amd64"
测试一下能否正常运行:
bin/nexus run
有:
无法启动成功,gc的值比我分配给它的要多了。。怎么这东西这么吃内存的的???
改改参数:
变更为512m,然后:
启动成功。
好了,给nexus添加一下系统服务,方便开机启动。
/lib/systemd/system 创建 nexus.service
内容:
[Unit]
Description=Nexus3服务
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nexus/bin/nexus start
## ExecReload=/usr/local/@projectName@/service.sh restart
ExecStop=/usr/local/nexus/bin/nexus stop
PrivateTmp=True
[Install]
WantedBy=multiVersions-user.target
ps:如果你有域名的话,也可以用域名+nginx 来导向nexus。
nexus3中央仓库改为阿里云
参考:这里写链接内容
找到中央仓库
然后修改成:
http://maven.aliyun.com/nexus/content/groups/public/
idea使用私服maven及对应配置
参考:
这里写链接内容
首先,新建一个maven项目—自己新建吧。
然后,
勘误-多仓库配置
下面说说经常出现的问题:
[ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Could not find artifact org.apache.maven.plugins:maven-clean-plugin:jar:2.5 in life.cnart.releases (http://nexus地址/repository/maven-releases/) -> [Help 1]
而settings.xml配置了多个mirror:
其他同仁也碰到问题了:
Maven配置单仓库与多仓库(Nexus)
大意如下:
虽然mirrors可以配置多个子节点,但是它只会使用其中的一个节点,
即**默认情况下配置多个mirror的情况下,只有第一个生效,**只有当前一个mirror
无法连接的时候,才会去找后一个;
而我们想要的效果是:当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载,但是maven不会这样做!
正确的操作是在profiles节点下配置多个profile,而且配置之后要激活。
settings.xml参考内容如下:
<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">
<profiles>
<profile>
<id>repo-nexus</id>
<repositories>
<repository>
<id>repo-nexus</id>
<url>http://192.168.50.100:13081/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>repo-aliyun</id>
<repositories>
<repository>
<id>repo-aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>maven-central</id>
<repositories>
<repository>
<id>maven-central</id>
<url>http://central.maven.org/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
<profiles>
<servers>
<server>
<id>repo-nexus</id>
<username>admin</username>
<password>nexus的密码</password>
</server>
</servers>
<activeProfiles>
<activeProfile>repo-nexus</activeProfile>
<activeProfile>repo-aliyun</activeProfile>
<activeProfile>maven-central</activeProfile>
</activeProfiles>
</settings>
pom.xml配置
第一,指定多仓库,例如:
<repositories>
<repository>
<id>repo-nexus</id>
<name>内部仓库</name>
<url>http://192.168.50.244:8081/repository/maven-releases/</url>
</repository>
<repository>
<id>repo-aliyun</id>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
<repository>
<id>jcenter</id>
<name>JCenter Repository</name>
<url>https://jcenter.bintray.com/</url>
</repository>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo1.maven.org/maven2</url>
</repository>
</repositories>
第二,配置 distribute 分发nexus服务:
<distributionManagement>
<repository>
<id>repo-nexus</id>
<name>内部仓库</name>
<url>http://192.168.50.244:8081/repository/maven-releases/</url>
</repository>
</distributionManagement>
第三,记得在maven的settings.xml添加nexus凭证:
<servers>
<server>
<id>repo-nexus</id>
<username>admin</username>
<password>密码</password>
</server>
</servers>
这一段是错误的(存档用) begin
看到本机的maven 配置文件,
打开来,然后:
添加我们的maven私服及servers—用来发布类库的。
格式如下:
<?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">
<mirrors>
<!--内部maven-->
<mirror>
<id>central</id>
<mirrorOf>*</mirrorOf>
<name>Central Repository</name>
<url>http://你仓库的地址/repository/maven-public/</url>
</mirror>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>你的密码</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>你的密码</password>
</server>
</servers>
</settings>
这一段是错误的(存档用) end
发布快照及正式版本
maven(15),快照与发布,RELEASE与SNAPSHOT
在pom.xml文件最后添加distributionManagement发布管理节点:
例如:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://你的maven地址/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://你的maven地址/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意一下
<groupId>net.funfunle</groupId>
<artifactId>baselib</artifactId>
<!--<version>1.0-SNAPSHOT</version>-->
<version>1.0.1-RELEASE</version>
groupid这些,
<groupId>net.funfunle</groupId>
<artifactId>baselib</artifactId>
<!--<version>1.0-SNAPSHOT</version>-->
<version>1.0.1-RELEASE</version>
决定发布的是正式版本release还是快照snapshot的是
<!--<version>1.0-SNAPSHOT</version>-->
<version>1.0.1-RELEASE</version>
版本号及发布类型,有一点也需要注意,snapshot快照允许重复发布更新同一个版本,而release是不允许的,release每次发布版本号都要加的。
发布方式:
在mavenproject点击发布deploy。
好了,发布的结果如下:
查看一下nexus3是不是有结果了: