部署Maven与Nexus(私服)

博文大纲:
一、Maven简介
1)Maven的功能:
2)Maven使用场景(从运维人员的角度来看):
3)Maven仓库
二、部署Maven
1)配置jdk环境
2)部署Maven
三、部署Nexus私服
1)Nexus简介
2)部署Nexus
四、Maven配置nexus私服,将远程仓库设置成本地搭建的Nexus私服
1)修改maven的主配置文件
2)创建一个maven项目进行测试
3)配置认证,将打包好的项目上传到nexus中
4)上传到maven-release仓库
5)上传第三方maven

一、Maven简介

Maven是属于apache软件基金会下一个开源免费的项目,是跨平台的项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理,可以在代码进行部署的过程中自动解决项目中代码的依赖环境,需要从maven的镜像仓库中进行下载依赖环境,通常下载比较慢,企业中会在公司内部搭建nexus(私服),将构建项目中的依赖环境保存到nexus服务器中,提高访问速度。

POM项目对象模型,是Maven工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。
执行任务或目标时,Maven会在当前目录中查找POM。读取POM,获取所需的配置信息,然后执行目标。

POM中可以指定以下配置:项目依赖、插件、执行目标、项目构建profile、项目版本、项目开发列表、相关邮件列表信息。

1)Maven的功能:

1)1. mavne模型的Java项目对源代码、单元测试代码、资源、jar包等有规范和目录规划;
2)2. 解决项目间的依赖关系、版本不一致、版本冲突问题;
3)3. 合理的jar管理机制;

2)Maven使用场景(从运维人员的角度来看):

1)原来项目中的jar包必须手动复制、粘贴到WEB-INF/lib项目下,而借助maven,可以将jar包仅仅保存在仓库中,有需要使用的工程只需要引用这个文件,并不需要重复复制到工程中;
2)原来的项目中所需要的jar包都是提前下载好的,而maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载;
3)原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而maven会自动将被依赖的jar包导进来;
4)原来的项目一个项目就是一个工程,而借助maven可以将一个项目拆分成多个工程;

项目构建过程包括:【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。

3)Maven仓库

在Maven的专业术语中,仓库是指一个位置,Maven仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

Maven仓库能帮助我们管理构件(主要是Jar),它就是放置所有JAR文件(WAR、ZIP、POM等等)的地方。

Maven仓库有三种类型:本地、中央、远程。

1)本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。

2)中央仓库

Maven中央仓库是由Maven社区提供的仓库,其中包含了大量常用的库。

maven内置了远程公用仓库:http://repo1.maven.org/maven2

中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

3)第三方仓库

第三方仓库又称为内部中心仓库,也称为私服。

私服:一般是由公司自己设立的,只为公司内部共享使用。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率(使用了私服就减少了对中央仓库的访问)。

如需了解更多,可以移步这篇文档:Maven教程

二、部署Maven

安装Maven需依赖java环境,所以应实现部署jdk环境!

注:该博文用到的所有源码包都可以从我提供的网盘链接中下载

1)配置jdk环境

[[email protected] ~]#  rpm -qa | grep jdk             //查询本机默认JDK环境
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
copy-jdk-configs-3.3-2.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
[[email protected] ~]# yum -y remove java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
[[email protected] ~]# yum -y remove java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
//将原本的jdk-headless包卸载
[[email protected] ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local                //将提供的JDK软件包进行解压
[[email protected] ~]# vim /etc/profile                //编写系统环境变量,在末尾添加以下内容
        export JAVA_HOME=/usr/local/jdk1.8.0_211                     //指定Java安装路径
        export JRE_HOME=/usr/local/jdk1.8.0_211/jre                  //Java运行环境
        export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar              //声明Java中的类,类就是一类事务的属性
        export PATH=$JAVA_HOME/bin/:$JRE_HOME/bin/:$PATH             //将定义的变量添加到系统环境变量中
[[email protected] ~]# source /etc/profile                    //重新加载系统环境变量文件
[[email protected] ~]#java -version                           //查询支持的Java版本信息
java version "1.8.0_211"                              //符合要求
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

2)部署Maven

[[email protected] ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
#可直接使用网盘中的apache-maven-3.6.1-bin.tar.gz
[[email protected] ~]# tar zxf apache-maven-3.6.3-bin.tar.gz -C /usr/src
[[email protected] ~]# mv /usr/src/apache-maven-3.6.3/ /usr/local/maven
[[email protected] ~]# vim /etc/profile           #添加以下内容
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
[[email protected] ~]# source /etc/profile
[[email protected] ~]# mvn -v        #出现下面内容就部署成功了(因为这是二进制的方式部署)
Apache Maven 3.6.3 (cecedd343002696d0abb0b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_211/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

1)配置使用阿里云仓库地址

由于使用maven官网的地址。下载较慢,所以直接更改为阿里云提供的maven仓库地址!

[[email protected] ~]# vim /usr/local/maven/conf/settings.xml
#定位到158行,填写一下内容
    <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
      <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>          #必须写在这个标签里面
#mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径
#<mirrorOf>central</mirrorOf>里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库   

2)构建项目进行测试

[[email protected] ~]# mkdir /tmp/testdir
[[email protected] ~]# cd /tmp/testdir/
#执行下面命令进行测试
[[email protected] testdir]# mvn archetype:generate -DgroupId=com.lzj.maven.quickstart -DartifactIdk=testapp -DarchetypeArtifactId=maven-archetype-quickstart
#创建一个maven项目(Java类型),可加-DinteractiveMode=false取消交互过程
                     ...........................#省略部分内容
Define value for property ‘artifactId‘: testapp      #需手动指定项目名称,可自定义,接下来保持默认即可!
[INFO] BUILD SUCCESS        #当出现这行提示信息,则表示构建成功
#上述命令解释如下:
# archetype:generate:创建一个简单的java项目;
# archetype 也就是原型,是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。
#使用 quickstart 原型插件创建一个简单的 java 应用程序
# -DgroupId:组织名,公司网址的反写(反向域名)+项目名称;
# -DartifactIdk:项目名或者模块名;
# - DarchetypeArtifactId:指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用;
# -DinteractiveMode: 是否使用交互模式。

3)生成的POM文件参数解释

当前目录生成的内容:

[[email protected] testdir]# ls   #上述命令执行成功后,会在当前目录下生成以项目名称命名的目录
testapp
[[email protected] testdir]# cd testapp/      #进入生成的目录
[[email protected] testapp]# ls                #查看目录下生成的文件
pom.xml  src
[[email protected] testapp]# cat pom.xml         #pom文件参数解释
project: 根,这是对Project添加一些根元素的约束信息
modelversion:指定当前maven模型的版本号
grouopId:应该是公司名或者组织名。一般来说groupID有三个部分组成,每个部分之间以“.”分隔,第一部分是项目的用途,比如用于商业的就是com,用于非商业盈利性组织的就是org,第二部分是公司名,比如tentxun/baidu/alibaba,第三部分是你的项目名
artifactId:可以认为是maven构建的项目名,比如你的项目中有子项目,就可以使用“项目名-子项目的命名方式
packaging: 指定生成的格式(jar/war/rar/pom/ear)
version:版本号,SNAPSHOT意味快照,说明该项目还在开发中,是不稳定的版本
name:项目的名称, Maven产生的文档用
url:项目主页的url,Maven产生的文档用
dependencies标签:指定开发构建(jar包)
JUnit是一个Java语言的单元测试框架

用户宿主目录下也会生成本地仓库:

[[email protected] testdir]# ls ~/.m2/repository/
antlr  asm  commons-codec  commons-collections  commons-io  commons-lang  jdom  net  org

4)Maven配置文件

Maven 的配置文件名称为:setting.xml。它被存放在两个地方:
1)/usr/local/maven/conf/settings.xml #安装的目录;
2)~/.m2/settings.xml #用户的家目录;

其中,安装目录配置又是全局配置,用户目录配置被称为用户配置。如果两者都存在,他们的内容将被合并,并且用户范围的settings.xml优先。

默认用户目录不存在配置文件,可以copy maven安装目录下的settings.xml到用户目录。

关于settings.xml文件常用的的配置修改如下:
1)修改本地仓库存储路径,默认值是~/.m2/repository 可在settings.xml中的localrepository修改成自己需要的目录;
2)如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,需要离线模式下,设置offline属性,设置为true,默认为false;
3)修改中央仓库服务器,修改配置文件中便签,添加或修改镜像地址;
4)设置代理地址,修改配置文件中proxy标签,定义代理服务器,实现maven的代理。

由于中央仓库服务器是国外的,在国内使用的话,下载比较慢,所以建议国内用户使用阿里云仓库地址。

5)Maven常用命令

[[email protected] testapp]# pwd      #确认当前目录是之前构建的项目下
/tmp/testdir/testapp
[[email protected] testapp]# mvn compile   #编译(在编译的过程中,可以看到使用的是阿里云的仓库)
[INFO] BUILD SUCCESS      #只要在输出信息的最后几行中看到该行,则表示执行成功
#以后所有命令都一样,只要最后几行有上述信息,就表示执行成功
[[email protected] testapp]# ls    #会看到目录下会生成新的目录target
pom.xml  src  target
# target:打包输出目录,如打包好的jar或war文件;
# target/classes:编译输出目录;
[[email protected] testapp]# mvn test          #测试命令
[[email protected] testapp]# ls target/test-classes/
com
# target/test-classes:测试编译输出目录
[[email protected] testapp]# mvn clean   #清理命令(就是将编译和测试生成的目录删除)
[roo[email protected] testapp]# ls      # target目录已经不在了
pom.xml  src
[[email protected] testapp]# mvn package       #打包命令
[[email protected] testapp]# ls target/     #会生成一个jar包
classes         surefire-reports
maven-archiver  testapp-1.0-SNAPSHOT.jar
maven-status    test-classes
[[email protected] testapp]# mvn install         #安装命令(作用是将压缩文件jar包或者war包上传到本地仓库)
[[email protected] testapp]# ls ~/.m2/repository/com/lzj/maven/quickstart/testapp/1.0-SNAPSHOT/
#查看上传的包
maven-metadata-local.xml  testapp-1.0-SNAPSHOT.jar
_remote.repositories      testapp-1.0-SNAPSHOT.pom
# 直接使用maven install命令对项目进行上传到本地仓库,
# 那么前面所有的步骤将会自动执行,比如源代码的编译、打包等等。
[[email protected] testapp]# mvn deploy      #发布(将包上传到私服,现在我这里还没有私服,所以会失败)

6)mvn命令的生命周期

maven基于构建生命周期这个中心概念,这意味着构建和分布特定项目的过程被明确定义,具体如下:
大致的生命周期图:

详细的生命周期图:

7)构建一个web项目,打出war包,并部署到tomcat

[[email protected] testdir]# mvn archetype:generate -DgroupId=cn.test.testweb -DartifactId=testweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
#构建web项目
#生成的目录结构如下:
[[email protected] testdir]# ls testweb/
pom.xml  src
[[email protected] testdir]# cat testweb/src/main/webapp/index.jsp
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
[[email protected] testdir]# cd testweb/   #进入项目目录下
[[email protected] testweb]# mvn package         #打包为war包
[[email protected] testweb]# ls target/      #将会在该目录下生成一个war包
classes  maven-archiver  testweb  testweb.war
#将生成的war包移动到Tomcat的网页根目录(webapps)下,它将自动解压,
#然后即可访问Tomcat测试生成的war包
[[email protected] testweb]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
[[email protected] testweb]# tar zxf apache-tomcat-9.0.31.tar.gz
[[email protected] testweb]# mv apache-tomcat-9.0.31 /usr/local/tomcat        #安装tomcat
[[email protected] testweb]# mv target/testweb.war /usr/local/tomcat/webapps/ #移动到Tomcat网页根目录
[[email protected] testweb]# /usr/local/tomcat/bin/startup.sh    #启动Tomcat
[[email protected] testweb]# ls /usr/local/tomcat/webapps/      #查看,war包被自动解压了
docs      host-manager  ROOT     testweb.war
examples  manager       testweb

客户端访问移动到Tomcat网页根目录下的war包,如图:

三、部署Nexus私服

1)Nexus简介

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

Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。对于Maven来说,仓库只有两种:本地仓库和远程仓库。

本地仓库就是我们在maven的setting.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库是maven默认的远程仓库。

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

Nexus的功能:
1)节省外网带宽。大量对于外部仓库的重复请求会消耗带宽,利用私服代理外部仓库,可以消除对外的重复构件下载,降低带宽的压力。
2)加速Maven构建。加速Maven构建。不停地连接请求外部仓库十分的耗时,Maven在执行构建的时候不停地检查远程仓库的数据。利用私服,Maven只检查局域网的数据,提高构建的速度。
3)部署第三方构件。部署第三方构件。当某个构件无法从任何一个外部远程仓库获得。建立私服之后,便可以将这些构件部署到私服,供内部的Maven项目使用。
4)提高稳定性,增强控制。提高稳定性,增强控制。Maven构建高度依赖于远程仓库,因此,当网络不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。私服缓存了大量构建,即使暂时没有网络,Maven也可以正常的运行。
5)降低中央仓库的负荷。降低中央仓库的负荷。使用私服可以避免很多对中央仓库的重复下载,降低中央仓库的压力。

2)部署Nexus

这个软件从官网下载较慢,可从博文开头的网盘链接中获取!

[[email protected] ~]# mkdir /usr/local/nexus
[[email protected] ~]# tar zxf nexus-3.17.0-01-unix.tar.gz -C /usr/local/nexus/
#启动nexus必须使用nexus用户,不可以使用权限过高的用户,比如root,否则会启动失败
[[email protected] ~]# useradd nexus
[[email protected] ~]# chown -R nexus:nexus /usr/local/nexus/
[[email protected] ~]# cd /usr/local/nexus/
[[email protected] nexus]# ls
nexus-3.17.0-01      #这是应用目录
sonatype-work       #这是工作目录,存放镜像仓库
#运行内存和工作目录nexus-3.17.0-01/bin/nexus.vmoptions (修改对应字段即可)
#运行监听地址和端口nexus-3.17.0-01/etc/nexus-default.properties
[[email protected] nexus]# ln -s /usr/local/nexus/nexus-3.17.0-01/bin/nexus /usr/local/bin/
#创建命令软连接
#切换至nexus用户,并启动nexus服务,如果使用root用户,会因为权限过高而启动失败
[[email protected] nexus]# su nexus
[[email protected] nexus]$ nexus start      #启动nexus
Starting nexus
[[email protected] nexus]# netstat -anpt | grep 8081      #默认监听8081端口
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      61881/java 

启动成功,浏览器进行访问:

[[email protected] ~]# cat /usr/local/nexus/sonatype-work/nexus3/admin.password
da8b24ed-8bd2-42c5-864f-858216a21cf4       #复制查看出的密码信息





1)创建角色

如图:


2)创建用户

如图:

3)查看默认仓库类型

如图:

默认的仓库类型介绍:

  • group(仓库组类型):又叫组仓库,用于方便开发人员,自己设定的仓库
  • hosted(宿主类型):内部项目的发布仓库(内部开发人员发布上去存放的仓库);
  • proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值,即被代理的远程仓库的路径);
  • virtual(虚拟类型):虚拟仓库(这个基本上用不到);

Public Repositories下的仓库类型:

  • 3rd party::无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
  • Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
  • Central::用来代理maven中央仓库中发布版本构件的仓库
  • entral M1 shadow::用于提供中央仓库中M1格式的发布版本的构件镜像仓库
  • Codehaus Snapshots::用来代理CodehausMaven 仓库的快照版本构件的仓库
  • Releases::内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
  • Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本;

4)开启release的重复发版权限

开发中需要重复发版,则需要开启release类型仓库的对应权限设置allow redeploy。如下:

5)设置代理仓库(采用阿里云maven仓库)

如图:



阿里云仓库的URL:https://maven.aliyun.com/nexus/content/groups/public/

6)将添加的阿里云Proxy加入默认group中

如图:


保存后,再次刷新页面,即可看到当前的Nexus地址:

关于上述配置的常见使用场景介绍如下:

  • release发版仓库(nexus默认已建立:maven-releasees);
  • snapshot 测试中心快照仓库(nexus默认已建立:maven-snapshots);
  • central 中央仓库 (nexus默认已建立:maven-central);

关于组:在nexus中可以建立组,将不同类型仓库集合在一起(nexus默认已建立:maven-public)

  • 场景一: 自定义新建proxy类型仓库,在maven配置中分别配置不同调用地址,或是将自定义新建的proxy仓库统一加入一个组,在maven配置中调用一个地址;
  • 场景二: 使用maven已经建立好的proxy仓库,且使用已建立好的组(maven-public)配置maven调用地址;
    场景一和场景二本质上讲没有什么变化,根据公司开发习惯和需求进行配置即可!

四、Maven配置nexus私服,将远程仓库设置成本地搭建的Nexus私服

1)修改maven的主配置文件

[[email protected] ~]# vim /usr/local/maven/conf/settings.xml
…………………………   #省略部分内容
    <mirror>
      <id>nexus-testconf</id>
      <mirrorOf>*</mirrorOf>
      <name>nexus testconf</name>
      <url>http://192.168.1.7:8081/repository/maven-public/</url>
    </mirror>
#上面的URL就是在nexus上查看到的URL
  </mirrors>
             ..........................#省略部分内容
  #跳转至260行左右,写以下内容
 <profile>
       <id>testconf</id>

      <repositories>
         <repository>
           <id>nexus</id>
           <url>http://192.168.1.7:8081/repository/maven-public/</url>
           <releases>
             <enable>true</enable>
           </releases>
           <snapshots>
             <enable>true</enable>
           </snapshots>
        </repository>
       </repositories>

      <pluginRepositories>
        <pluginRepository>
          <id>nexus</id>
          <url>http://192.168.1.7:8081/repository/maven-public/</url>
           <releases>
            <enable>true</enable>
          </releases>
          <snapshots>
             <enable>true</enable>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
     </profile>

  </profiles>       #需在该标签以上进行添加!
             ..........................#省略部分内容
  <activeProfiles>
    <activeProfile>testconf</activeProfile>    #这里的值一定要和上面profile的ID对应,才可以激活
  </activeProfiles>
</settings>          #将 <activeProfiles>字段写在settings字段上面

2)创建一个maven项目进行测试

需首先开启匿名写入nexus的权限,如下:

[[email protected] ~]# rm -rf ~/.m2/         #先删除本地仓库的缓存
[[email protected] ~]# cd /tmp/testdir/
[[email protected] testdir]# mvn archetype:generate -DgroupId=cn.ljz.ljzweb -DartifactId=lzjweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
#构建项目,可以看到在构建的过程中使用的是nexus私服地址。
[[email protected] testdir]# cd lzjweb/      #进入构建后的项目
[[email protected] lzjweb]# mvn package        #将项目打包
[[email protected] lzjweb]# ls                 #打包后,会生成target目录
pom.xml  src  target

web页面进行查看:

3)配置认证,将打包好的项目上传到nexus中

[[email protected] lzjweb]# vim  /usr/local/maven/conf/settings.xml
#搜索“server”字段
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    -->         #定位到该行,写入以下内容,大概是124行
    <server>
      <id>test-nexus</id>     #自定义ID
      <username>testdevops</username>   #刚开始在nexus的web页面添加的用户名ID号
      <password>123456</password>     #用户名密码
    </server>
#修改项目中的pod.xml文件
[[email protected] lzjweb]# pwd
/tmp/testdir/lzjweb
[[email protected] lzjweb]# ls
pom.xml  src  target
[[email protected] ljzweb]# vim pom.xml    #编辑配置文件
      .....................#省略部分内容,以下内容是手动添加的
<distributionManagement>
        <snapshotRepository>
            <id>test-nexus</id>     #这里的ID必须和上面settings文件中配置认证的ID一致
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.7:8081/repository/maven-snapshots/</url>
                        #上面是修订版本的URL,可在nexus的web界面查看
        </snapshotRepository>
        <repository>
            <id>test-nexus</id>
            <name>Nexus releases</name>
            <url>http://192.168.1.7:8081/repository/maven-releases/</url>
                        #上面是发行版本的URL,同样在web界面的Repositories中可以查看到
        </repository>
</distributionManagement>
</project>           #在最后一行上面添加以上内容

web页面进行查看:


如果在部署过程中,出现了错误,首先先检查一下配置文件setting.xml的账号密码有没有与nexus创建的用户密码相同,其次再检查setting.xml里的id标签和pom.xml文件中的id标签是否相同,不同会报401(没有权限)的错误。

4)上传到maven-release仓库

[[email protected] lzjweb]# vim /tmp/testdir/lzjweb/pom.xml
………………          #省略部分内容
  <version>1.0-SNAPSHOT</version>
    #将上面这行的“SNAPSHOT”去掉,更改后如下:
  <version>1.0</version>
[[email protected] lzjweb]# mvn deploy      #再次上传

web页面进行查看:

5)上传第三方maven包到nexus私服中

如图:




Maven添加第三方仓库地址(全局配置)


[[email protected] lzjweb]# vim /usr/local/maven/conf/settings.xml
#在之前的profiles(闭合标签差不多在293行),填写以下内容
        <repository>
          <id>3rdnexus</id>
          <url>http://192.168.1.7:8081/repository/3rd/</url>
          <release>
            <enable>true</enable>
          </release>
          <snapshots>
            <enable>true</enable>
          </snapshots>
        </repository>
  </profiles>             #添加到这个Profiles标签上面(添加之前应该是293行)
#在之前的认证字段,再添加一个认证
        <server>
      <id>test-nexus</id>
      <username>testdevops</username>
      <password>123456</password>
    </server>            #此行以上是之前添加的,再次添加以下内容
   <server>
      <id>3rdnexus</id>    #此ID要与profile中的ID对应
      <username>testdevops</username>
      <password>123456</password>
    </server>
[[email protected] testdir]# ll aliyun-sdk-oss-2.6.1.jar
-rw-r--r-- 1 root root 470115 10月 10 17:43 aliyun-sdk-oss-2.6.1.jar
[[email protected] testdir]# mvn deploy:deploy-file -DgroupId=com.aliyun.oss -DartifactId=aliyun-sdk-oss -Dversion=2.6.1 -Dpackaging=jar -Dfile=/tmp/testdir/aliyun-sdk-oss-2.6.1.jar -Durl=http://192.168.1.7:8081/repository/3rd/ -DrepositoryId=3rdnexus
#基于本地的jar包构建项目      

web页面查看上传的jar包:


———————————— 本文至此结束,感谢阅读 ————————————

原文地址:https://blog.51cto.com/14157628/2472382

时间: 2024-09-30 18:46:09

部署Maven与Nexus(私服)的相关文章

maven搭建nexus私服在myeclipse中的使用

开始注明:下方的内容中个别图片是从几个网站中黏贴进来的,时间太长忘记注明来源了,原作者看见能提醒我下,我注明,抱歉!下方大多数是自己总结的,有些描述的比较细,只是论述了个人能理解的部分.如果不知道maven如果在myeclipse中配置,那么请看我上篇博文:"maven在myeclipse8.6中的配置". 1.简介 这里主要是对maven和nexus私服的使用.nexus私服,可以理解为在本地局域网建立了一个类似中央仓库的处理器,我们开始将资料下载到中央服务器中,然后在本地maven

Maven之——Nexus私服

Maven之--Nexus私服 1.    Nexus简介 2005年12月.TamasCservernak由于受不了匈牙利电信ADSL的低速度.开始着手开发Proximily.可以代理并缓存Maven构件.2007被Sonatype邀请参与创建一个Maven仓库管理软件.这就是后来的Nexus.牛人总是在不经意间显露着他们的能力与才华. Nexus有开源版和专业版.专业版收费.下面的都是建立在开源版的Nexus. 2.    Nexus安装 Nexus本身是典型的JavaWeb应用.ExtJS

Maven配置Nexus私服

官方文档:http://books.sonatype.com/nexus-book/3.0/reference/maven.html#maven-sect-single-group 1,下载安装 首先你需要下载apache maven.官方地址:https://maven.apache.org/download.cgi 这里介绍的是windows环境中的配置.2,修改配置文件 解压后,备份 apache-maven-3.3.9\conf\settings.xml 文件. 用如下文件内容替换set

【Maven】---Nexus私服配置Setting和Pom

maven---nexus私服配置setting和pom 上一遍博客已经在linux服务器上,搭建好nexus私服了,博客地址:Linux搭建Nexus3.X私服 现在就需要配置setting.xml和pom.xml来使nexus作为maven的私服.setting.xml文件在conf下面,pom.xml是在你创建maven项目中的pom.xml中. 一.将jar发送到nexus私服务器 1.创建maven项目 创建一个最简单的maven项目,然后新建一个工具类,用来测试当把它打成jar包放到

Maven使用Nexus私服的配置

工作记录 —————————————————————————————— 配置文件 apache-maven-3.3.3\conf\settings.xml 在mirrors(镜像)之间配置. url为私服地址 <!-- 配置maven只使用私服时,第一个mirrorOf之间写*就行.osgeo和geosolutions不能使用nexus,必须绕过--> <mirror> <id>nexus</id> <mirrorOf>external:*,!o

Maven、eclipse与Nexus私服配置指南

1.1  Maven 1.1.1  相关概念 Maven是一个软件项目管理工具,通过它可便捷的管理项目的生命周期.即项目的jar包依赖,开发,测试,发布打包.版本等.虽然目前的IDE工具(如eclipse)可管理开发.发布.打包工作,但还没有形成一套完成的体系. Maven有以下几个功能特点: 1. jar包依赖 这个也许会maven最突出的特点.使用maven进行开发时,不需要上网单独下载jar包,只需要在配置文件pom.xml中配置jar包的依赖关系,就可以自动下载jar包到我们的项目中(在

maven入门基础:使用maven部署构件到nexus(十五)

一. 在setting.xml中设置发布用户的用户名和密码 账号密码:deployment,deployment123 <servers> <!-- 设置私服用户名和密码 --> <server> <id>nexus-release</id> <username>deployment</username> <password>deployment123</password> </server&

Maven创建并管理Web项目(上传Web项目的API的JAR到Nexus 私服上)

目录 1.简介 2.安装Eclipse Maven插件 3.用Eclipse创建Maven Web项目 4.配置settings.xml 文件并下载项目依赖的JAR,并上传Web项目的api的JAR到Nexus 私服 1.简介 Maven.Nexus 私服的安装和配置和Maven的优点在Maven和 Sonatype Nexus私服的安装.配置及使用入门已经有介绍了,这里就不在介绍了,今天我们要介绍Maven创建并管理Web项目,方便我们项目的开发和管理. 2.安装Eclipse Maven插件

Maven-005-部署构件至 nexus 私服

nexus 私服仓库中宿主仓库主要用于储存装置内部的或一些无法从公共仓库获取的第三方构件,供项目组的人员使用.日常开发中,可将各版本构件直接部署到 Nexus 中对应策略的宿主仓库中.上篇文章中讲述了如何搭建 nexus 私服,那么如何将项目部署至 nexus 私服,供项目组的其他人员使用呢? 首先,配置 POM 文件的 distributionManagement 节点,实例配置如下所示: <project> ... <distributionManagement> <re