【Maven】CentOS7使用Nexus3搭建maven私服

摘要:
所有项目配置信息都定义在一个名为POM.xml的文件中。目前,Apache下的大多数项目都由Maven管理。Maven还支持多个插件,而不是浪费时间学习如何在不同环境中依赖jar包。svn仓库存储项目源代码。当Maven需要下载组件时,它会将它们提供给本地仓库供下载。
一、简介

  Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。
maven和ant都是软件构建工具(软件管理工具),maven比ant更加强大,已经取代了ant,jar包的声明式依赖描述。maven有jar包的仓库。svn是一个软件的版本控制工具,是一个协同开发工具。svn的仓库存放的是项目的源码,历史版本的备份,声明每次版本的修改情况。

  私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

  【Maven】CentOS7使用Nexus3搭建maven私服第1张

  来到新公司发现maven私服都没有,还在用手动打jar包的方式添加依赖,所以不得不研究这个了。

二、搭建maven

1.下载maven压缩包  apache-maven-3.5.4-bin.tar.gz ,然后解压  tar -zxf apache-maven-3.5.4-bin.tar.gz

2.添加环境变量

vi /etc/profile

在文件下方添加如下内容(这里的MAVEN_HOME需要改为你自己的maven解压目录):

export JAVA_HOME="/opt/jdk1.8"
export MAVEN_HOME="/opt/apache-maven-3.5.4"
export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"

然后保存退出。

3.输入命令 mvn version 看到如下内容说明安装成功了。

【Maven】CentOS7使用Nexus3搭建maven私服第2张

三、部署nexus

3.1.下载

由于专业版的nexus是收费的,所以我下载的是开源版 Nexus OSS,下载地址为 https://www.sonatype.com/download-oss-sonatype

【Maven】CentOS7使用Nexus3搭建maven私服第3张

点击红框区域即可下载得到文件nexus-3.13.0-01-unix.tar.gz,然后上传到服务器目录下,我的是/opt目录。

3.2.解压

cd /opt
tar -zxf nexus-3.13.0-01-unix.tar.gz

解压后会多出两个目录,nexus-3.13.0-01sonatype-work。

虽然不知道后面一个目录是干嘛的,不管它就行了。

3.3.启动

1 cd nexus-3.13.0-01/bin/
2 ./nexus start

【Maven】CentOS7使用Nexus3搭建maven私服第4张

看到如图所示内容表明我们已经启动成功了,游览器输入http://localhost:8081即可访问。

注意:

1.Nexus3开始访问URL已经变了,以前是http://localhost:8081/nexus,这个坑了我好一会儿。

2.启动后如果你立即访问可能发现什么都没有,不要急这个启动需要一定时间,30秒后到1分钟后再尝试访问,这个开始我以为出问题了。

【Maven】CentOS7使用Nexus3搭建maven私服第5张 

点击右上角的sign in登录,输入账户admin,密码admin123即可登录成功。

3.4仓库介绍

【Maven】CentOS7使用Nexus3搭建maven私服第6张

按图中标识顺序点击,就可以看到有这些仓库,现在分别介绍它们,分为三种类型:

proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。    

Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里,一般用来存放公司自己的jar包
Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可

maven-public:maven-central、maven-release和maven-snapshot三个库的合集。

maven-release:用来存放release版本的jar包。

maven-snapshot:用来存放snapshot版本的jar包。

四、上传jar包到maven私服

4.1添加仓库认证

找到本地电脑的setting.xml(我的是C:Users2YSP.m2setting.xml),打开后找到servers节点,在里面添加如下内容。

<server>
        <id>releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>

4.2在项目的pom.xml添加远程发布的私服仓库地址

 1     <distributionManagement>
 2         <repository>
 3             <!--此id要与setting.xml里面server的id对应-->
 4             <id>releases</id>
 5             <name>releases Repository</name>
 6             <url>http://192.168.75.132:8081/repository/maven-releases/</url>
 7         </repository>
 8         <snapshotRepository>
 9             <id>snapshots</id>
10             <name>snapshots</name>
11             <url>http://192.168.75.132:8081/repository/maven-snapshots/</url>
12         </snapshotRepository>
13     </distributionManagement>

这里的192.168.75.132是我虚拟机的IP地址,这里的URL可以点击仓库查看详情获取。

4.3发布

【Maven】CentOS7使用Nexus3搭建maven私服第7张

先点击clean,在点击deploy就会自动根据项目的版本上传到对应的仓库(如果pom.xml上版本是1.1-SNAPSHOT则会deploy到maven-snapshot,如果是1.1.RELEASE则会deploy到maven-release)。

一般打包时maven会自动执行单元测试很耗时间,如果想略过该过程可以在pom文件添加如下插件。

1 <!-- 打包跳过测试-->
2             <plugin>
3                 <groupId>org.apache.maven.plugins</groupId>
4                 <artifactId>maven-surefire-plugin</artifactId>
5                 <version>2.18.1</version>
6                 <configuration>
7                     <skipTests>true</skipTests>
8                 </configuration>
9             </plugin>

上传结果如图:

【Maven】CentOS7使用Nexus3搭建maven私服第8张

然后在maven仓库里就可以找到我们刚刚上传的jar包了。

【Maven】CentOS7使用Nexus3搭建maven私服第9张

注意:maven仓库的Deployment policy一定要设置成allow redeploy,否则会上传失败。

五、从私服下载jar包

5.1添加仓库地址

<repositories>
        <repository>
            <id>releases</id>
            <name>maven-public</name>
            <url>http://192.168.75.132:8081/repository/maven-public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>

    </repositories>

针对单个项目,这个可以添加到项目的pom.xml文件里,如果很多项目都需要可以添加到setting.xml文件中。

5.2添加依赖,以下为示例

<dependency>
            <groupId>cn.sp</groupId>
            <artifactId>kafka-spring-boot</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

然后一刷新发现项目里就有了。

六、常见错误及解决办法

问题一:上传报错误码405,Failed to transfer file。

解决方法:仔细查看报错信息就会发现,是上传的url错了,反正原因就是repository的地址写错了。

问题二:错误码401或者403

解决方法:其实403错误就是“禁止访问”的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无法部署的问题在这个地方,方法是将其修改为“Allow Redeploy”就可以了。401就是Maven settings.xml没有设置密码。

具体参考地址:https://www.javatang.com/archives/2010/01/23/4518375.html

免责声明:文章转载自《【Maven】CentOS7使用Nexus3搭建maven私服》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇开发者使用JasperReport——带参数查询数据库EF的左连接查询下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网页仿 Office 2003 的工具条

网页仿 Office 2003 的工具条   [ 日期:2005-01-27 ]   [ 来自:网上摘录 ]<html><head><meta http-equiv="Content-Language" content="zh-cn"><meta http-equiv="Content-Type" content=...

springmvc总结(配置传递参数去除前后空格、参数绑定时处理日期)

1.属性为Integer时,前台表单不填,默认为null;属性为String,前台表单不填,默认为"";2.属性为Integer时,前台表单填空格,model封装为null;属性为String,前台表单填空格,model封装为"  ";3.属性为Integer,后台model封装时【去除】前后空格;属性为String,后台model封装时【不去除】前后空格...

JS拖动滑块验证

使用这种验证方法的目的:证明当前的用户不是机器人~防止恶意操作。 实现思路:   1、获取silde滑块(获取元素)   2、为元素注册事件———鼠标点击事件(onmousedown)鼠标点击之后获得当前鼠标的X坐标。   3、如何获取到鼠标的x坐标——使用clientX事件(当事件被触发时,鼠标指针的水平坐标)。   4、鼠标移动事件发生后根据从最开始点...

Spring Integration sftp 专栏详解

Spring Integration Sftp 文件传送 目前在国内项目开发中,使用Spring Integration技术的比较少,尤其是中文的参考文献和项目案例,更是罕有。鉴于此,本文详细介绍spring integration sftp模块在Sftp服务器和本地服务器之间文件的传送。SFTP(Secure File Transfer Protocol...

JAVA取得WEBROOT物理路径

引用:http://theron19.iteye.com/blog/678000 在WEB -INF/web .xml 中 , 创建一个webAppRootKey的param, 指定一个值(默认为webapp.root)作为键值, 然后通过Listener , 或者Filter , 或者Servlet 执行String webAppRootKey = ge...

Android四大组件--Broadcast Receiver具体解释

本文主要讲述了: 一、BroadcastReceiver概述: 二、BroadcastReceiver事件分类 三、BroadcastReceiver事件的编程流程 四、两类BroadcastReceiver 五、普通广播和有序广播 六、Service与BroadcastReceiver怎样交互? 七、开机自己主动执行service 八、Broadcas...