某山寨

z4zr的待调教小窝

Nexus(Maven仓库管理器)安装及配置

Nexus(Maven仓库管理器)安装及配置

Nexus介绍

Nexus是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个Extjs的REST客户端,占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。此文章以较旧的Nexus2为例。

基础环境

jdk-8u131-linux-x64.rpm(有个差不多的JDK就可以,因为用CentOS玩所以懒懒的下一个rpm包)
nexus-2.12.0-01-bundle.tar.gz(尽量最新的咯,由于某些原因这里装的是2)

Nexus下载

下载地址:http://www.sonatype.org/nexus/archived/下载开源版本

NEXUS OSS [Open Source Software,开源软件 免费]
NEXUS PROFESSIONAL -FREE TRIAL [专业版本 收费]

安装

安装JDK

# rpm -ivh jdk-8u131-linux-x64.rpm

安装Nexus

# tar -xvzf nexus-2.12.0-01-bundle.tar.gz
解压缩得到2个文件夹,放置位置看个人喜好咯
    nexus-2.12.0-01 为Nexus程序文件(我把它放在了/usr/local目录下)
    sonatype-work 用于存储jar包等内容(我把它放在了/var目录下)

Nexus本地仓库默认的jar包存储位置是:/sonatype-work/nexus/storage/central。Central仓库占用存储较多的存储空间。

配置Nexus

# vim /usr/local/nexus-2.12.0-01/conf/nexus.properties 
==============================================================
# Jetty section
application-port=80    端口
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/    访问路径

# Nexus section work目录地址,Maven仓库JAR缓存地址
nexus-work=/var/sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF

请确保安装好JDK并设置了环境变量/etc/profile

# vim /usr/local/nexus-2.12.0-01/bin/nexus
==============================================================
NEXUS_HOME=".."  
#上方内容建议不要改,可能会因配置原因导致“Missing platform binary: /etc/rc.d/init.d/../bin/jsw/linux-x86-64/wrapper”

#RUN_AS_USER=  
#nexus启动用户  一定要设定一个用户,强烈不推荐使用root启动
RUN_AS_USER=nexus
==============================================================
果断手撸一个用户比较好
# groupadd nexus
# useradd nexus -g nexus -d /home/nexus -s /bin/sh
# chown -R nexus: /usr/local/nexus-2.12.0-01/
# chown -R nexus: /var/sonatype-work/

修改JDK

# vim /usr/local/nexus-2.12.0-01/bin/jsw/conf/wrapper.conf
==============================================================
根据实际配置情况,可能需要自行设定JDK路径
wrapper.java.command=/usr/java/jdk1.8.0_131/bin/java

推荐加到系统服务中

# ln -s /usr/local/nexus-2.12.0-01/bin/nexus /etc/init.d/nexus
# chmod 755 /etc/init.d/nexus
# chown nexus /etc/init.d/nexus
# cd /etc/init.d
# chkconfig --add nexus
# chkconfig --levels 345 nexus on

启动Nexus

如果没有设定RUN_AS_USER=ROOT且没有创建nexus用户会显示如下内容,内容提示的很明白

# /usr/local/nexus-2.12.0-01/bin/nexus start
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.

下方为看似正常启动的信息,看到如下信息不等于Nexus已经完成启动,到jetty开始监听需要一段时间,请耐心等待。

# service nexus start
Starting Nexus OSS...
Started Nexus OSS.

异常处理

虽然启动服务显示的信息为Started Nexus OSS.虽然启动成功但还是无法访问且查看status为停止的。
查看nexus的log得到的信息,后方为截取的异常部分内容,废话很多。。。

因为前方设定的端口为80,且系统为linux导致jetty无法启动监听。。。
很怂的解决办法是把application-port更改为大于1024的端口
网上可以找到的和谐方法是将80端口再映射到设定的端口上,好不爽。
资料:使用iptables解决Jetty不能在80端口启动的问题

jvm 1    | 2017-04-28 11:20:10,040+0800 WARN  [jetty-main-1] *SYSTEM org.eclipse.jetty.util.component.AbstractLifeCycle - FAILED InstrumentedSelectChannelCon
nector@0.0.0.0:80: java.net.SocketException: Permission denied
jvm 1    | java.net.SocketException: Permission denied
jvm 1    |      at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_131]
jvm 1    |      at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:187) ~[jetty-server-8.1.16.v20140903.jar:8.1.16.v2014
0903]
jvm 1    |      at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:316) ~[jetty-server-8.1.16.v20140903.jar:8.1.16.v20140903]
jvm 1    |      at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:265) ~[jetty-server-8.1.16.v20140903.jar:8.1.16.v2
0140903]
jvm 1    |      at org.sonatype.nexus.bootstrap.jetty.InstrumentedSelectChannelConnector.doStart(InstrumentedSelectChannelConnector.java:85) ~[nexus-bootstra
p-2.12.0-01.jar:2.12.0-01]
jvm 1    |      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
jvm 1    |      at org.eclipse.jetty.server.Server.doStart(Server.java:293) [jetty-server-8.1.16.v20140903.jar:8.1.16.v20140903]
jvm 1    |      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
jvm 1    |      at org.sonatype.nexus.bootstrap.jetty.JettyServer$JettyMainThread.run(JettyServer.java:247) [nexus-bootstrap-2.12.0-01.jar:2.12.0-01]
jvm 1    | 2017-04-28 11:20:10,041+0800 WARN  [jetty-main-1] *SYSTEM org.eclipse.jetty.util.component.AbstractLifeCycle - FAILED org.eclipse.jetty.server.Server@7fafc8f3: java.net.SocketException: Permission denied
jvm 1    | java.net.SocketException: Permission denied
jvm 1    |      at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_131]
jvm 1    |      at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_131]
jvm 1    |      at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:187) ~[jetty-server-8.1.16.v20140903.jar:8.1.16.v20140903]
jvm 1    |      at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:316) ~[jetty-server-8.1.16.v20140903.jar:8.1.16.v20140903]
jvm 1    |      at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:265) ~[jetty-server-8.1.16.v20140903.jar:8.1.16.v20140903]

OK 服务启动完成!可以调戏了!
用户名:admin
密码:admin123

最暴力使用方式

更详细的使用教程请自行百度,这里只做最无脑终结之地。。。

在pom.xml中加入如下内容(具体内容根据情况而定)
    <repositories>
        <repository>
            <id>Nexus-706</id>
            <name>Team Nexus Repository</name>
            <url>http://192.168.1.112:6666/content/groups/public/</url>
        </repository>
    </repositories>

添加新评论

文章二维码