Nexus创建Maven私服说明

参考文献;https://blog.csdn.net/trustyourself1/article/details/80423569

https://www.jb51.net/article/152942.htm

一、私服介绍

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

在这里插入图片描述

二、Nexus介绍

Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。
正常做法是在本地架设一个Maven仓库服务器,即利用Nexus私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。
Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
Nexus支持WebDAV与LDAP安全身份认证。
Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。

为什么要构建Nexus私服?
如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。

总之,在本地构建nexus私服的好处有
1)加速构建;
2)节省带宽;
3)节省中央maven仓库的带宽;
4)稳定(应付一旦中央服务器出问题的情况);
5)控制和审计;
6)能够部署第三方构件;
7)可以建立本地内部仓库;
8)可以建立公共仓库
这些优点使得Nexus日趋成为最流行的Maven仓库管理器。

三、Nexus安装

使用docker进行安装

  • Default credentials are: admin / admin123
  • It can take some time (2-3 minutes) for the service to launch in a
    new container. You can tail the log to determine once Nexus is ready:

$ docker logs -f nexus

  • Installation of Nexus is to /opt/sonatype/nexus.
  • A persistent directory, /nexus-data, is used for configuration,
    logs, and storage. This directory needs to be writable by the Nexus
    process, which runs as UID 200.

Persistent Data

\1. Use a data volume. Since data volumes are persistent
until no containers use them, a volume can be created specifically for
this purpose. This is the recommended approach.

$ docker volume create --name nexus-data
$ docker run -d -p 8081:8081 --name nexus –v nexus-data:/nexus-data sonatype/docker-nexus3

\2. Mount a host directory as the volume. This is not portable, as it
relies on the directory existing with correct permissions on the host.
However it can be useful in certain situations where this volume needs
to be assigned to certain specific underlying storage.

$ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data
$ docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/docker-nexus3

**四 **Nexus使用

访问nexus,即http://172.19.xx.xxx:9091 (如果出现404,就访问http://localhost:9091/nexus)[此处我改了nexus的web端口]
在这里插入图片描述
出现上述页面,说明配置nexus成功!
点击右上角“Log in”,
输入默认用户名(admin)和默认密码(admin123)登录

可以点击上面的“设置”图标,在“设置”里可以添加用户、角色,对接LDAP等的设置,如下:

在这里插入图片描述
[外链图片转存失败(img-mNrwwCSf-1567593642685)(file:///C:/Users/user/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)]

可以在“管理”里查看nexus的系统信息
在这里插入图片描述
注意下面几点说明:
1.component name的一些说明:
1)maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
2)maven-releases:私库发行版jar
3)maven-snapshots:私库快照(调试版本)jar
4)maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。
2.Nexus默认的仓库类型有以下四种:
1)group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库;
2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);
3)proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);
4)virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);
3.Policy(策略):表示该仓库为发布(Release)版本仓库还是快照(Snapshot)版本仓库;
4.Public Repositories下的仓库
1)3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
3)Central: 用来代理maven中央仓库中发布版本构件的仓库
4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
7)Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本
所以自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下载包会更快。
5.Nexus默认的端口是8081,可以在etc/nexus-default.properties配置中修改。
6.Nexus默认的用户名密码是admin/admin123

Nexus仓库分类的概念:
1)Maven可直接从宿主仓库下载构件,也可以从代理仓库下载构件,而代理仓库间接的从远程仓库下载并缓存构件
2)为了方便,Maven可以从仓库组下载构件,而仓库组并没有时间的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容).

在这里插入图片描述

五、Nexus的web界面功能介绍

1.Browse Server Content

在这里插入图片描述

1.1 Search

这个就是类似Maven仓库上的搜索功能,就是从私服上查找是否有哪些包。
注意:
1)在Search这级是支持模糊搜索的,如图所示:
在这里插入图片描述

2)如果进入具体的目录,好像不支持模糊搜索,如图所示:

在这里插入图片描述

1.2 Browse

在这里插入图片描述

1)Assets
这是能看到所有的资源,包含Jar,已经对Jar的一些描述信息。
2)Components
这里只能看到Jar包。

2.Server Adminstration And configuration

看到这个选项的前提是要进行登录的,如上面已经介绍登陆方法,右上角点击“Sign In”的登录按钮,输入admin/admin123,登录成功之后,即可看到此功能,如图所示:
在这里插入图片描述

2.1 Blob Stores

文件存储的地方,创建一个目录的话,对应文件系统的一个目录,如图所示:
在这里插入图片描述

2.2 Repositories

在这里插入图片描述

1)Proxy
这里就是代理的意思,代理中央Maven仓库,当PC访问中央库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。
这样的优势只要其中一个人从中央库下来了,以后大家都是从Nexus私服上进行下来,私服一般部署在内网,这样大大节约的宽带。
创建Proxy的具体步骤
1–点击“Create Repositories”按钮
在这里插入图片描述

2–选择要创建的类型
在这里插入图片描述

3–填写详细信息
Name:就是为代理起个名字
Remote Storage: 代理的地址,Maven的地址为: https://repo1.maven.org/maven2/
Blob Store: 选择代理下载包的存放路径
在这里插入图片描述
2)Hosted
Hosted是宿主机的意思,就是怎么把第三方的Jar放到私服上。
Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的
Hosted的创建和Proxy是一致的,具体步骤和上面基本一致。如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意事项:
Deployment Pollcy: 需要把策略改成“Allow redeploy”。
在这里插入图片描述

3)Group
能把两个仓库合成一个仓库来使用,目前没使用过,所以没做详细的研究。

2.3 Security

这里主要是用户、角色、权限的配置(上面已经提到了在这里添加用户和角色等)
在这里插入图片描述

2.4 Support

包含日志及数据分析。

在这里插入图片描述

六、 Nexus使用配置说明

本地maven库配置settings.xml

<settings>

<!—添加插件说明 -->

  <pluginGroups>
    <pluginGroup>org.sonatype.plugins</pluginGroup>
  </pluginGroups>

<!--使用的中央仓库代理服务器-->

<!--nexus服务器账号,密码 -->
 <servers>
   		<server>
			<id>csu-nexus</id>
			<username>admin</username>
			<password>admin123</password>
		</server> 	
		<server>  
		<!--releases 连接发布版本项目仓库-->  
			<id>releases</id>  
			<!--访问releases这个私服上的仓库所用的账户和密码-->  
			<username>admin</username>  
			<password>admin123</password>  
		</server> 
	
		<server>  
			<!--snapshots 连接测试版本项目仓库-->  
			<id>snapshots</id>  
			<!--访问releases这个私服上的仓库所用的账户和密码-->  
			<username>admin</username>  
			<password>admin123</password>  
		</server>  
  </servers>



<!—设置私服的仓库 -->

	<mirrors>
		<mirror>
			<id>nexus</id>
			<mirrorOf>*</mirrorOf>
			<url>http://172.19.xx.xxx:9091/repository/csu-mvn-group/</url>
		</mirror>
	</mirrors>

</settings>

工程配置pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>navinfo</groupId>
  <artifactId>XXXXX</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>XXXXX</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.46</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
	<!--上传jar包到nexus时候需要的配置-->
  <distributionManagement>
    <repository>
      <id>releases</id>
      <name>releases</name>
      <url>http://172.19.xx.xxx:9091/repository/csu-mvn-release/</url>
    </repository>
    <snapshotRepository>
      <id>releases</id>
      <name>snapshot</name>
      <url>http://172.19.xx.xxx:9091/repository/csu-mvn-snapshot/</url>
    </snapshotRepository>
  </distributionManagement>

  <build>
    <defaultGoal>compile</defaultGoal>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
    
    
</project>

七、上传到Nexus上

1–项目编译成的jar是release

<groupId>com.woasis</groupId>
<artifactId>test-nexus</artifactId>
<version>1.0.0 </span></version>
<packaging>jar</packaging>

2–使用mvn deploy命令运行即可(运行结果在此略过)

3–因为Snapshot是快照版本,默认他每次会把Jar加一个时间戳,做为历史备份版本。

八、第三方Jar上传到Nexus

mvn deploy:deploy-file -DgroupId=org.apache.ibatis -DartifactId=ibatis-sqlmap -Dversion=2.3.0.677 -Dpackaging=jar -Dfile=ibatis-2.3.0.677.jar -Drepositoryid=nexus -Durl=http://192.168.100.103:8081/repository/maven-releases/

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐