【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件
文章目录
- Nexus是什么
- Nexus下载和安装
- 1. 进入 Nexus 2.x 下载页面,根据本机操作系统,选择对应的版本进行下载,如下图所示。
- 2. 将下载 Nexus 安装包解压到本地磁盘,可获得 nexus-2.14.20-02 和 sonatype-work 2 个目录,如下图。
- 3. nexus-2.14.20-02 中包含以下目录及文件。
- 4. .进入 \nexus-2.14.20-02\bin\jsw 文件夹,根须操作系统版本选择合适的目录,由于我的操作系统是 Windows 10 64 位,所以我选择 windows-x86-64 目录,如下图所示。
- 5. 进入 windows-x86-64 目录后可以看到如下文件。
- 6. 双击运行 install-nexus.bat 安装 Nexus 服务,然后运行 start-nexus.bat 启动服务。
- 7. 访问 http://localhost:8081/nexus,结果如下图,则表示服务启动成功,否则表示服务启动失败。
- 8. 点击首页右上角的“Log In”按钮,在登录页面输入用户名和密码(默认分别为:admin 和 admin123 ),最后点击“Log In”按钮登录。
- 9. 登录成功后,结果如下图。
- Nexus仓库属性和分类
- Nexus 仓库属性
- Nexus 仓库分类
- Nexus创建仓库
- 1. 点击左边导航栏中的 Repositories,如下图。
- 2. 点击 Nexus 仓库列表上方的 Add... 按钮,在下拉菜单中选择 Hosted Repository,如下图。
- 3. 在宿主仓库配置界面,填写对应信息,然后点击 Save 按钮进行保存,如下图。
- 4. 查看 Nexus 仓库列表,可以看到自定义的宿主仓库已经创建完成,如下图。
- 创建 Nexus 代理仓库
- 创建 Nexus 仓库组
- Nexus索引与构件搜索
- 索引
- 下载索引
- 构件搜索
- 从Nexus下载构件
- 在 pom.xml 中配置
- 部署构件到Nexus
- 使用 Maven 部署构件到 Nexus
- 1. 配置项目的 POM 文件
- 2. 在 setting.xml 中配置认证信息
- 3. 使用 mvn 命令部署构件
- 1)打开命令行窗口,跳转到 test-upload-snapshot 项目得目录下,执行如下 Maven 命令。
- 2) Maven 命令执行结果如下图。
- 手动上传构件
- 1. 打开命令行窗口,跳转到 App-Core-lib 的目录下,执行如下 mvn 命令,对项目进行打包。
- 2.打包完成后,进入 App-Core-lib\target 目录,可以看到 Maven 已经将该项目打包成了一个 jar 文件,如图 2 所示。
- 3. 在 Nexus 界面的仓库列表中选择 3rd party 仓库,在下方选择 Artifact Upload 选项卡,其中 GAV Definition 用于定义上传构件的坐标信息。
- 4. 在仓库列表中选中 3rd party 宿主仓库,在下方的 Browse Index 选项卡中,可以看到构件已经被部署到该仓库中,如图 5 所示。
- Nexus3的使用
- 下载 Nexus 3
- 1. 进入 Nexus 3.x 下载页面(目前最新版是 3.30.0-01),根据操作选择相应的版本进行下载。
- 2. 将下载的安装包解压到本地,可获得 nexus-3.30.0-01 和 sonatype-work 两个目录,如图 2。
- 启动 nexus 服务
- 访问 nexus 3.x
- Nexus离线更新中央仓库索引
- 文件下载
- 1. 浏览器访问 https://repo.maven.apache.org/maven2/.index/ ,下载 nexus-maven-repository-index.gz 和 nexus-maven-repository-index.properties 两个文件(一般位于列表的末尾),如图 1 所示。
- 2. 浏览器访问 http://mvnrepository.com/,搜索 Indexer CLI,选择 Maven :: Indexer CLI,如图 2 所示。
- 3. 建议选择 5.1.1 版本,如图 3 所示。
- 4. 在 Indexer CLI » 5.1.1 版本详情页,点击 View All,查看该版本包含的所有文件。
- 5. 在文件列表中,点击 indexer-cli-5.1.1.jar ,下载该文件,如图 5 所示。
- 解压
- 1. 将 nexus-maven-repository-index.gz 、nexus-maven-repository-index.properties 以及 indexer-cli-5.1.1.jar 三个文件都存放到 index(目录的名称及位置均为自定义,没有特殊规定)目录下,如图 6 所示。
- 2. 打开命令行窗口,跳转到 index 目录,执行以下命令,解压索引文件。
- 3. 解压完成后,在 index 中会生成一个名为 indexer 的目录,该目录中存放的就是中央仓库离线索引文件,如图 8 所示。
- 更新并验证索引
- 1. 将所有索引文件(不包含目录)全部拷贝到“Nexus\sonatype-work\nexus\indexer\central-ctx”目录中,如图 9 所示。
- 2. 重启 Nexus,在仓库列表中,选中 Central 代理仓库,然后点击 Browse Index 选项卡,结果如图 10 所示。
- 3. 点击 browse Remote 选项卡,结果如图 11 所示。
- 4. 对比 Browse Index 和 Browse Remote 中的索引,若两者完全一致,则表示离线索引更新成功。
Nexus是什么
Nexus 读音:/ˈneksəs/是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为“Maven仓库管理器”。
Maven 私服其实并不是 Maven 的核心概念,它仅仅是一种衍生出来的特殊的仓库,但这并不代表它不重要,相反由于私服具有降低中央仓库负荷、节省外网带宽、以及提高项目稳定性等优点,使得私服在实际开发过程中得到了相当普遍地使用。
能够帮助我们建立私服的软件被称为 Maven 仓库管理器,主要有以下 3 种:
- Apache Archiva
- JFrog Artifactory
- Sonatype Nexus
其中,Sonatype Nexus 是当前最流行,使用最广泛的 Maven 仓库管理器。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。
Nexus 开源版具有以下特性:
- 占用内存小(28 M 左右)
- 具有基于 ExtJs 得操作界面,用户体验较好
- 使用基于 Restlet 的完全 REST API
- 支持代理仓库、宿主仓库和仓库组
- 基于文件系统,不需要依赖数据库
- 支持仓库索引以及搜索
- 支持在界面上上传构件
- 安全控制
Nexus 专业版需要付费购买,它主要包含一些企业级的高级特性,详情请参考 Sonatype Nexus 官方文档。
Nexus下载和安装
目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,它们是并行的关系,目前使用最多,运行最稳定的是 Nexus 2.x,下面我们以 Nexus 2.x 为例,演示 Nexus 的安装过程。
1. 进入 Nexus 2.x 下载页面,根据本机操作系统,选择对应的版本进行下载,如下图所示。
图1:Nexus 2.x 下载页面
2. 将下载 Nexus 安装包解压到本地磁盘,可获得 nexus-2.14.20-02 和 sonatype-work 2 个目录,如下图。
图2:Nexus 2.x 目录
其中:
- nexus-2.14.20-02:该目录中包含了 Nexus 2.x 运行所需要的文件,如启动脚本、依赖 jar 包等。
- sonatype-work:该目录中包含了 Nexus 2.x 生成的配置文件、日志文件等。
3. nexus-2.14.20-02 中包含以下目录及文件。
图3:nexus-2.14.20-02 目录及文件列表
nexus-2.14.20-02 目录说明,如下表所示。
子目录 | 说明 |
---|---|
bin | 命令中心(启动命令,关闭命令) |
conf | 配置中心(管理着仓库列表、日志配置,以及安全设置) |
lib | Nexus 的库文件,Nexus 运行时需要的 jar 包所在的目录 |
logs | 存放日志文件 |
nexus | Nexus 应用程序 |
tmp | 存放Nexus 运行时产生的临时文件 |
4. .进入 \nexus-2.14.20-02\bin\jsw 文件夹,根须操作系统版本选择合适的目录,由于我的操作系统是 Windows 10 64 位,所以我选择 windows-x86-64 目录,如下图所示。
图4:nexus-2.14.20-02\bin\jsw 目录列表
5. 进入 windows-x86-64 目录后可以看到如下文件。
图5:Nexus 启动文件列表
其中:
- console-nexus.bat:启动 Nexus 并在 DOS 命令行中展示启动过程。
- install-nexus.bat:将 Nexus 安装为 Windows 服务,开机自动启动。
- start-nexus.bat:启动 Nexus。
- stops-nexus.bat:停止 Nexus。
- uninstall-nexus.bat:与 install-nexus.bat 相对应,负责卸载 Nexus 服务。
6. 双击运行 install-nexus.bat 安装 Nexus 服务,然后运行 start-nexus.bat 启动服务。
注意:
- 运行 install-nexus.bat 安装服务,若提示”wrapper | OpenSCManager failed - 拒绝访问。 (0x5)“,只要关闭窗口,以管理员身份运行即可解决。
- 运行 start-nexus.bat 启动服务,若提示”wrapper | OpenSCManager failed - 拒绝访问。 (0x5)“,只要关闭窗口,以管理员身份运行即可解决。
7. 访问 http://localhost:8081/nexus,结果如下图,则表示服务启动成功,否则表示服务启动失败。
图6:Nexus 首页
8. 点击首页右上角的“Log In”按钮,在登录页面输入用户名和密码(默认分别为:admin 和 admin123 ),最后点击“Log In”按钮登录。
图7:Nexus 登录界面
9. 登录成功后,结果如下图。
图8:Nexus 登录成功
Nexus仓库属性和分类
Nexus 作为一款 Maven 仓库管理器,仓库(Repository)自然是 Nexus 最核心的概念。Nexus 中提供了许多仓库概念,如代理仓库、宿主仓库以及仓库组等。Nexus 为每一种仓库都提供了丰富的配置参数,方便我们根据自身需要进行定制。
Nexus 仓库属性
点击左边导航栏中的 Repositories,可以看到 Nexus 自带的几个内置仓库,如下图所示。
图1:Nexus 内置仓库列表(猛击图片可以查看原图)
在仓库列表中,每个仓库都具有一系列属性:
- Type:仓库的类型,Nexus 中有 4 中仓库类型:group(仓库组)、hosted(宿主仓库)、proxy(代理仓库)以及 virtual(虚拟仓库)。
- Format:仓库的格式。
- Policy:仓库的策略,表示该仓库是发布(Release)版本仓库还是快照(Snapshot)版本仓库。
- Repository Status:仓库的状态。
- Repository Path:仓库的路径。
由图 1 可知,Nexus 2.x 默认创建了 6 个仓库,我们称它们为 Nexus 内置仓库。
- Maven Central:该仓库用来代理 Maven 中央仓库,其策略为 Release,只会下载和缓存中央仓库中的发布版本的构件。
- Releases:策略为 Release 的宿主仓库,用来部署公司或组织内部的发布版本构件。
- Snapshots:策略为 Snapshot 的宿主仓库,用来部署公司或组织内部的快照版本构件。
- 3rd party:策略为 Release 的宿主仓库,用来部署第三方发布版本构件,这些构件一般无法从任何远程仓库中获得。
- Public Repositories:该仓库组将上述所有存储策略为 Release 的仓库聚合并通过统一的地址提供服务。
Nexus 仓库分类
Nexus 仓库按照类型(Type)区分,主要分为以下 3 个类型:
- 代理仓库(proxy):用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库。
- 宿主仓库(hosted):又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。
- 仓库组(group):用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。
为了更加直观的理解仓库组、代理仓库和宿主仓库的概念,我们通过下图展示它们的用途和区别。
图2: Nexus仓库分类
由上图可知:
- Maven 可以直接从宿主仓库中下载构件。
- Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
- Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。
Nexus创建仓库
首先,我们需要创建两个宿主仓库,分别用来存储从本地上传到 Nexus 的 Snapshot 和 Release 版本的构件,操作步骤如下。
1. 点击左边导航栏中的 Repositories,如下图。
图1:Nexus 导航
2. 点击 Nexus 仓库列表上方的 Add… 按钮,在下拉菜单中选择 Hosted Repository,如下图。
图2:添加宿主仓库
3. 在宿主仓库配置界面,填写对应信息,然后点击 Save 按钮进行保存,如下图。
图3:配置宿主仓库
宿主仓库配置如下:
配置 | 说明 |
---|---|
Repository ID | 仓库 ID。 |
Repository Name | 仓库名称。 |
Repository Type | 仓库的类型,如 hosted、proxy 等等。 |
Provider | 用来确定仓库的格式,一般默认选择 Maven2。 |
Repository Policy | 仓库的策略。 |
Default Local Storage Location | 仓库默认存储目录,例如 D:\nexus-2.14.20-02-bundle\sonatype-work\nexus\indexer\bianchengbang_Snapshot_hosted_ctx。 |
Override Local Storage Location | 自定义仓库存储目录。 |
Deployment Policy | 仓库的部署策略。 |
Allow File Browsing | 用来控制是否允许浏览仓库内容,一般选择 true。 |
Include in Search | 用来控制该仓库是否创建索引并提供搜索功能。 |
Publish URL | 用来控制是否通过 URL 提供服务。 |
Not Found Cache TTL | 缓存某构件不存在信息的时间,默认取值为 1440,表示若某一个构件在仓库中没有找到,在 1440 分钟内再次接收到该构件的请求,则直接返回不存在信息,不会再次查找。 |
4. 查看 Nexus 仓库列表,可以看到自定义的宿主仓库已经创建完成,如下图。
图4:Nexus 仓库列表(猛击图片,查看原图)
重复以上步骤,再创建一个名称为 bianchengbang_Release_hosted ,策略为 hosted 的宿主仓库。
图5:Nexus 仓库列表-宿主仓库(猛击图片,查看原图)
创建 Nexus 代理仓库
下面我们创建一个代理仓库,用来下载和缓存中央仓库的构件,操作步骤如下。
点击 Nexus 仓库列表上方的 Add… 按钮,在下拉菜单中选择 Proxy Repository,如图 5 所示。
图5:添加代理仓库
在代理仓库配置界面,填写对应信息,然后点击 Save 按钮进行保存,如图 6 所示。
图6:Nexus 代理仓库配置界面
代理仓库配置中,仓库 ID、仓库名称、Provider、Policy 以及 Default Local Storage Location 等配置的含义与宿主仓库相同,不再赘述。需要注意的是,代理仓库的 Repository Type 的取值是 proxy。
代理仓库配置如下表。
配置 | 说明 |
---|---|
Remote Storage Location | 远程仓库或中央仓库的地址,它是 Nexus 代理仓库最重要得配置,必须输入有效值,通常取值为 https://repo1.maven.org/maven2/。 |
Download Remote Indexes 是否下载远程仓库的索引。 | |
Auto Blocking Enabled | 是否启用自动阻止,即当 Nexus 无法连接中央仓库或远程仓库时,是否一直等待。取值为 true 表示不再等待,直接通知客户端无法连接,并返回。 |
File Content Validation | 是否启用文件内容校验。 |
Checksum Policy | 配置校验和出错时的策略,用户可以选择忽略、警告、记录警告信息或拒绝下载等多种策略。 |
Artifact Max Age 构件缓存的最长时间,对于发布版本仓库来说,默认值为 -1,表示构件缓存后,就一直保存着,不再重新下载。对于快照版本仓库来说,默认值为 1440 分钟,表示每隔一天重新缓存一次代理的构件。 | |
Metadata Max Age | 仓库元数据缓存的最长时间。 |
Item Max Age | 项目缓存的最长时间。 |
创建 Nexus 仓库组
下面我们将创建一个仓库组,并将刚刚创建的 3 个仓库都聚合起来,操作步骤如下。
点击仓库列表上方的 Add… 按钮,在下拉菜单中选择 Repository Group,如下图。
图7:Nexus 添加仓库组
在仓库组配置界面,填写对应信息,并将 bianchengbang_central_proxy、bianchengbang_Release_hosted 和 bianchengbang_Snapshot_hosted 3 个仓库添加到仓库组中,最后点击 Save 按钮进行保存,如下图。
图8:Nexus 仓库组配置
查看 Nexus 仓库列表,可以看到 bianchengbang_repository_group 仓库组已经创建完成,如下图。
图9:Nexus 仓库列表-仓库组(猛击图片,查看原图)
Nexus索引与构件搜索
我们知道,Maven 中央仓库为用户提供了多达数十万构件,而 Nexus 可以代理所有的远程仓库(包括 Maven 中央仓库),可见 Nexus 仓库中构件的数量相当庞大。用户想要在这么多构件中,快速的查找自己所需的构件,一个最直接有效的方式就是:搜索。
Nexus 作为一款成熟的仓库管理工具,它通过维护仓库的索引提供了构件搜索功能,以便帮助用户方便快速地找到所需构件。
我们将详细为您介绍 Nexus 索引以及构件搜索功能。
索引
Nexus 能够遍历仓库的所有内容,搜集它们的坐标,校验和以及所包含的 Java 类等信息,然后以索引( nexus-indexer) 的形式保存起来。Nexus 索引保存在 Nexus 安装目录下 \sonatype-work\nexus\indexer 目录中,该目录下每个子目录都代表 Nexus 中的一个仓库,用来存放各个仓库的索引 ,如下图所示。
图1:Nexus 索引目录
大多数的远程公共仓库(例如,中央仓库)都维护了一个这样的索引,因此本地的 Nexus 在下载到这个索引后,就能在此基础上为用户提供构件搜索和浏览等服务。需要注意的是,并不是所有的公共仓库都提供了索引 ,对于那些没有提供索引的仓库来说,我们是无法对其进行搜索的。
下载索引
Nexus 索引下载功能默认是关闭的,如果想在 Nexus 中搜索远程仓库中的构件,就需要先开启索引下载功能。
以 bianchengbang_central_proxy 代理仓库(代理 Maven 中央仓库)为例,在图 2 所示的位置就可以控制它的索引下载功能,true 表示开启索引下载,false 表示关闭索引下载。
图2:远程索引下载
开启索引下载功能后,点击导航栏中 Scheduled Tasks 链接,查看调度任务列表。若 Nexus 正在下载索引,我们就能看到如图 3 所示的任务,其任务状态为 Running。在索引下载完毕后,该任务就会消失。
图3:Nexus 调度任务列表(猛击图片,查看原图)
由于 Maven 中央仓库的内容较多,其索引文件比较大,因此 Nexus 下载该文件所需的时间较长,需要我们耐心等待。
索引下载完成后,点击仓库列表中的 bianchengbang_central_proxy 代理仓库,然后在列表下方选择 Browse Index 选项卡,我们可以看到该仓库内容的树形结构,如图 4 所示。
图4:Nexus 仓库索引树形结构图
构件搜索
Nexus 通过维护索引,为用户提供了关键字搜索、类名搜索、坐标搜索等多种搜索功能,通过这些功能,页面中能够清晰地展示出结果构件的坐标以及所属仓库。用户可以直接下载相应的构件,也可以直接复制构件的 XML 依赖声明,到项目中使用。
在 Nexus 界面左边导航栏中有一个搜索框,在搜索框内输入所需构件的关键字,单击搜索按钮就能快速得到搜索结果,如图 5 所示。
图5:Nexus 搜索功能(猛击图片,查看原图)
搜索结果页中的每一行代表一类构件,其中包含了 Group、Artifact、版本、流行版本、以及下载链接等信息。点击其中某一行,下方就会出现该构件的详细信息,其中不但包含构件的坐标等基本信息,还包含一段 XML 依赖声明,我们可以将这段 XML 依赖声明直接复制到项目的 POM 中使用,如图 6 所示。
图6:Nexus 搜索结果详情
点击右侧的 Artifact 选项卡,还能看到构件的大小、上传时间、最后修改时间、仓库中的相对位置、校验和等信息,如图 7 所示。
图7:Nexus 搜索详情页 Artifact
除了关键字搜索外,Nexus 还提供了一些高级搜索功能,例如类名搜索、GAV 搜索以及“校验和”搜索。我们可以通过点击搜索页左上角的下拉菜单,选择高级搜索功能。
图8:Nexus 高级搜索功能
Nexus 还具有以下高级搜索功能:
- 类名搜索(Keyword Search):搜索包含某个 Java 类的构件。
- GAV 搜索(GAV Search):通过设置 Group、Artifact、版本等信息进行搜索。
- 校验和搜索(Checksum Search):通过使用“校验和”搜索构件。
这些搜索功能的使用都十分的简单,我们可以根据自己的需求选择合适的搜索功能。
从Nexus下载构件
Nexus 作为最流行的 Maven 私服之一,使用它主要目的之一:代理远程仓库,即当 Maven 需要下载构件到本地仓库使用时,不再请求外部的远程仓库,而直接从 Nexus 中下载。我们将介绍如何配置 Maven 从 Nexus 下载构件。
将 Nexus 的代理仓库配置到 Maven 项目中,用它们代替外部的远程仓库,即可实现 Maven 从 Nexus 下载构件。
- 在 pom.xml 中配置
- 在 setting.xml 中配置
在 pom.xml 中配置
在 Maven 项目的 pom.xml 中增加以下配置,可以为当前项目配置 Nexus 上的 bianchengbang_central_proxy 代理仓库。
<!--声明一个或多个远程仓库 -->
<repositories><!-- 声明一个 Nexus 私服上的仓库 --><repository><!--仓库id --><id>nexus</id><!-- 仓库的名称 --><name>nexus</name><!--仓库的地址 --><url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url><!-- 是否开启该仓库的 release 版本下载支持 --><releases><enabled>true</enabled></releases><!-- 是否开启该仓库的 snapshot 版本下载支持 --><snapshots><enabled>true</enabled></snapshots></repository>
</repositories>
<!-- 声明一个或多个远程插件仓库 -->
<pluginRepositories><!--声明一个 Nexus 私服上的插件仓库 --><pluginRepository><!--插件仓库 id --><id>nexus</id><!--插件仓库 名称 --><name>nexus</name><!-- 配置的插件仓库的地址 --><url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url><!-- 是否开启该插件仓库的 release 版本下载支持 --><releases><enabled>true</enabled></releases><!-- 是否开启该插件仓库的 snapshot 版本下载支持 --><snapshots><enabled>true</enabled></snapshots></pluginRepository>
</pluginRepositories>
其中,在 repositories 元素下可以使用 repository 子元素声明一个或多个远程仓库,一个 repository 元素对应一个远程仓库。
repository 各个子元素含义如下表。
子元素 | 含义 |
---|---|
id | 仓库的唯一标识。需要注意的是,Maven 中央仓库的 id 为 central,如果其他的仓库也使用该 id,就会覆盖中央仓库的配置。 |
name | 仓库的名称。 |
url | 仓库的地址,该地址一般都是基于 HTTP 协议的,通过浏览器即可访问该地址,浏览仓库中的构件。 |
releases/snapshots | 用来控制 Maven 对于发布和快照版本构件的下载。它们都有一个 enabled 子元素,enabled 的取值为 true,表示开启发布版或快照版的下载支持,否则表示关闭下载支持。 |
在 pluginRepositories 元素下可以使用 pluginRepository 子元素声明一个或多个远程插件仓库(包括私服上的仓库),一个 pluginRepository 元素对应一个远程插件仓库。pluginRepository 下所有子元素的含义均与与 repository 的子元素相同,这里就不再做过多赘述了。
示例 1
将以上配置加入 Maven 项目 Root 的 POM 文件中,并手动清空本地仓库的所有依赖构件(目的是为了让 Maven 重新获取构件)。
打开命令行窗口,跳转到 Root 所在的目录下,执行以下 mvn 命令。
mvn clean install
执行结果如下。
图1: 使用 Nexus 私服构建结果
由图 1 的构建过程可以看出,Root 项目构建所需的构建是从 Nexus 私服的 banchengbang_central_proxy 代理仓库中下载的,而不是从 Maven 中央仓库去下载。
在 setting 中配置
在 pom.xml 中配置 Nexus ,只对当前项目有效,在实际应用中,我们往往希望能够通过一次配置就能让本机中的所有 Maven 项目都使用 Nexus。此时,您可能会想到在 Maven 的 setting.xml 文件中进行配置,但 setting.xml 是不支持直接配置 repositories 和 pluginRepositories 。所幸 Maven 提供了 profile 机制,能够让我们将仓库配置放在 profile 中。
<profiles><profile><id>nexus</id><!--声明一个或多个远程仓库 --><repositories><!-- 声明一个 Nexus 私服上的仓库 --><repository><!--仓库id --><id>nexus</id><!-- 仓库的名称 --><name>nexus</name><!--仓库的地址 --><url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url><!-- 是否开启该仓库的 release 版本下载支持 --><releases><enabled>true</enabled></releases><!-- 是否开启该仓库的 snapshot 版本下载支持 --><snapshots><enabled>true</enabled></snapshots></repository></repositories><!-- 声明一个或多个远程插件仓库 --><pluginRepositories><!--声明一个 Nexus 私服上的插件仓库 --><pluginRepository><!--插件仓库 id --><id>nexus</id><!--插件仓库 名称 --><name>nexus</name><!-- 配置的插件仓库的地址 --><url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url><!-- 是否开启该插件仓库的 release 版本下载支持 --><releases><enabled>true</enabled></releases><!-- 是否开启该插件仓库的 snapshot 版本下载支持 --><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile>
</profiles>
<activeProfiles><activeProfile>nexus</activeProfile>
</activeProfiles>
以上配置中使用了一个 id 为 nexus 的 profile,这个 profile 中包含了与仓库相关的配置,同时配置中还使用了一个 activeProfiles 元素将 id 为 nexus 的 profile 激活。当本机有 Maven 项目构建时,profile 中的仓库配置就会应用到项目中。
示例 2
将以上配置分别添加到 Maven 安装目录\conf 和本地仓库目录下的 setting.xml 中,并将 Root 项目 POM 文件中的 repositories 和 pluginRepositories 等仓库设置删除。
打开命令行窗口,跳转到 Root 项目下,执行以下 mvn 命令。
mvn clean install
执行结果如下。
图2:Nexus 全局配置仓库
setting.xml 中添加镜像
Nexus 私服通常会与镜像(mirror)结合使用,使 Nexus 成为所有远程仓库的私服,这样不仅可以从 Nexus 中获取所有所需构件,还能将配置集中到 Nexus 私服中,简化 Maven 本身的配置。
我们可以创建一个匹配任何仓库的镜像,镜像的地址为 Nexus 中仓库的地址,这样 Maven 对于任何构件的下载请求都会被拦截跳转到 Nexus 私服中,其具体配置如下。
<mirrors><mirror><id>nexus</id><name>nexus name</name><mirrorOf>*</mirrorOf><url>http://localhost:8082/nexus/content/groups/bianchengbang_repository_group/</url></mirror>
</mirrors>
<profiles><profile><id>nexus</id><repositories><repository><id>central</id><url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile>
</profiles>
<activeProfiles><activeProfile>nexus</activeProfile>
</activeProfiles>
仓库和插件仓库的配置中,它们的 id 取值都是 central,即它们的设置覆盖了 Maven 中央仓库,但此时这里的 URL 已经无法起到任何作用,因为镜像的匹配规则是 *,所有的请求都已经被拦截,跳转到 Nexus 私服的地址。
部署构件到Nexus
如果仅仅是为了代理远程的公共仓库,那么 Nexus 的代理仓库就完全能够满足需要,但是我们知道,Nexus 除了代理仓库外,还有另一种仓库:宿主仓库。
宿主仓库的主要作用是存储公司或组织内部的构件,以及一些无法从公共仓库获取的第三方构件(JDBC 驱动),供用户下载使用。用户可以通过配置 Maven 将构件自动部署到 Nexus 宿主仓库,也可以在 Nexus 界面手动上传构件。
使用 Maven 部署构件到 Nexus
日常开发中,快照版本构件可以直接部署到 Nexus 中策略为 Snapshot 的宿主仓库中,而最终发布的版本则应该部署到 Nexus 中策略为 Release 的宿主仓库中。
使用 Maven 将构件部署到 Nexus 宿主仓库中主要分为 3 步:
- 配置项目的 POM 文件。
- 在 setting.xml 中配置认证信息。
- 使用 mvn 命令部署构件。
下面我们通过一个实例来详细介绍如何使用 Maven 部署构件到 Nexus 宿主仓库。
1. 配置项目的 POM 文件
创建一个名为 test-upload-snapshot 的 Maven 项目,并在其 POM 文件中添加如下配置。
<project>...<distributionManagement><repository><id>bianchengbang_Release_hosted</id><url>http://localhost:8082/nexus/content/repositories/bianchengbang_Release_hosted/</url></repository><snapshotRepository><id>bianchengbang_Snapshot_hosted</id><url>http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hosted/</url></snapshotRepository></distributionManagement>
</project>
以上配置说明如下:
- distributionManagement 元素:负责将指定的构件部署到 Nexus 指定的仓库中。
- repository 元素:distributionManagement 的子元素,用于定义部署 Release 版本的构件被部署的仓库。它有 2 子元素:id 和 url ,其中 id 为 Nexus 仓库的唯一标识,url 为 Nexus 宿主仓库的 url。
- snapshotRepository 元素:distributionManagement 的子元素,用于定义部署 Snapshot 版本的构件被部署的仓库。它也有 2 子元素:id 和 url ,且与 repository 中含义一致。
2. 在 setting.xml 中配置认证信息
最初版本的 Nexus 没有为宿主仓库提供任何的安全措施。如果宿主仓库开启了部署功能,任何人可以连接并部署构件至这个仓库,这显然是极不安全的。因此,现在的 Nexus 中增加了权限认证,Nexus 对于匿名用户是只读的,若想部署构件到 Nexus 中,则需要在 setting.xml 中配置如下认证信息。
<settings>...<servers><server><id>bianchengbang_Release_hosted</id><username>admin</username><password>admin123</password></server><server><id>bianchengbang_Snapshot_hosted</id><username>admin</username><password>admin123</password></server></servers>
</settings>
注意:以上配置中,server 元素中的 id 必须和 pom.xml 中 distributionManagement 元素对应仓库的 id 保持一致。Maven 在部署构件时,会先根据 id 查找用户名称和密码进行认证和登录,然后将构件部署到对应得宿主仓库。
3. 使用 mvn 命令部署构件
完成以上配置之后,就可以使用 Maven 命令将构件部署到宿主仓库了,操作步骤如下。
1)打开命令行窗口,跳转到 test-upload-snapshot 项目得目录下,执行如下 Maven 命令。
mvn clean deploy
2) Maven 命令执行结果如下图。
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< net.biancheng.www:test-upload-snapshot >---------------
[INFO] Building test-upload-snapshot 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ test-upload-snapshot ---
[INFO] Deleting D:\eclipse workSpace 3\test-upload-snapshot\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test-upload-snapshot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test-upload-snapshot ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ test-upload-snapshot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test-upload-snapshot ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ test-upload-snapshot ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ test-upload-snapshot ---
[INFO] Building jar: D:\eclipse workSpace 3\test-upload-snapshot\target\test-upload-snapshot-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ test-upload-snapshot ---
[INFO] Installing D:\eclipse workSpace 3\test-upload-snapshot\target\test-upload-snapshot-0.0.1-SNAPSHOT.jar to D:\myRep
ository\repository\net\biancheng\www\test-upload-snapshot\0.0.1-SNAPSHOT\test-upload-snapshot-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\eclipse workSpace 3\test-upload-snapshot\pom.xml to D:\myRepository\repository\net\biancheng\www\te
st-upload-snapshot\0.0.1-SNAPSHOT\test-upload-snapshot-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ test-upload-snapshot ---
Downloading from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_
hosted/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml
Downloaded from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_h
osted/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml (787 B at 9.2 kB/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.jar
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.jar (2.1 kB at 28 k
B/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.pom
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.pom (2.4 kB at 36 k
B/s)
Downloading from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_
hosted/net/biancheng/www/test-upload-snapshot/maven-metadata.xml
Downloaded from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_h
osted/net/biancheng/www/test-upload-snapshot/maven-metadata.xml (297 B at 11 kB/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml (787 B at 14 kB/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/maven-metadata.xml
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/maven-metadata.xml (297 B at 5.2 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.342 s
[INFO] Finished at: 2021-03-22T11:03:44+08:00
[INFO] ------------------------------------------------------------------------
在 Nexus 界面的仓库列表选中 bianchengbang_Snapshot_hosted 宿主仓库,在下方的 Browse Index 选项卡中,可以看到 test-upload-snapshot 构件已经被部署到该仓库中,如图 1 所示。
图1:使用 Maven 部署构件到 Nexus
手动上传构件
有些 Jar 文件(如 Oracle 的 JDBC 驱动)由于许可证等原因,无法存放在公开仓库中。此外,还有一些小型的开源项目,它们没有将自己的构件分发到公共仓库中,也没有维护自己的仓库,因此这些构件是无法从公共仓库中获得的。若 Maven 项目中需要这类构件,我们就需要将构件下载到本地,然后手动上传到 Nexus 私服。
我们还是以 Maven 项目 App-Core-lib 为例,将其打包后手动上传到 Nexus 内置宿主仓库 3rd party 中,具体步骤如下。
1. 打开命令行窗口,跳转到 App-Core-lib 的目录下,执行如下 mvn 命令,对项目进行打包。
mvn clean package
2.打包完成后,进入 App-Core-lib\target 目录,可以看到 Maven 已经将该项目打包成了一个 jar 文件,如图 2 所示。
图2:Maven 打包生成 jar 文件
3. 在 Nexus 界面的仓库列表中选择 3rd party 仓库,在下方选择 Artifact Upload 选项卡,其中 GAV Definition 用于定义上传构件的坐标信息。
GAV Definition 中提供了两种定义构件坐标的方式:
- 若该构件通过 Maven 构建产生的,则可以选择 From POM,Nexus 会自动从 POM 中获取构件的坐标。
- 若该构件来自第三方,则只能选择 GAV Parameters,手动定义构件的坐标。
以上 2 种方式操作时会略有不同,下面我们分别对它们进行介绍。
From POM
若该构件是通过 Maven 构建产生的,那么可以在 GAV Definition 下拉列表中,选择 From POM,然后指定该构件所属项目的 pom.xml,Nexus 会自动从 pom.xml 中获取构件的坐标。最后点击页面最下方的 Upload Artifact(s) 按钮,将构件上传到仓库中,如图 3 所示。
图3:Nexus 手动上传构件
GAV Paramters
若构件不是通过 Maven 构建的,而是来自第三方(例如 Oracle 的 JDBC 驱动),则只能在 GAV Definition 下拉列表中,选择 GAV Parameters 手动定义构件的坐标。
定义好坐标后,点击 Select Artifact(s) to Upload… 按钮选择要上传的构件,然后点击 Add Artifact 按钮将其加入上传列表中。最后点击页面最下方的 Upload Artifact(s) 按钮,将构件上传到仓库中,如图 4 所示。
图4:Nexus 第三方构件手动上传
4. 在仓库列表中选中 3rd party 宿主仓库,在下方的 Browse Index 选项卡中,可以看到构件已经被部署到该仓库中,如图 5 所示。
图5:第三方构件手动上传到Nexus
Nexus3的使用
目前 Nexus 分为 Nexus 2 和 Nexus 3 两个大版本,它们是并行的关系。与 Nexus 2 相比,Nexus 3 具有很多优势,例如支持更多的仓库格式、优化了用户的使用界面以及更加强大的搜索功能等等。
目前使用最多的,运行最稳定是 Nexus 2,但随着 Nexus 3 对 Maven 的支持越来越稳定,很多公司和组织都陆续开始使用 Nexus 3。
本节我们将介绍 Nexus 3 的安装和访问过程。
下载 Nexus 3
1. 进入 Nexus 3.x 下载页面(目前最新版是 3.30.0-01),根据操作选择相应的版本进行下载。
图1:Nexus 下载页面
2. 将下载的安装包解压到本地,可获得 nexus-3.30.0-01 和 sonatype-work 两个目录,如图 2。
图2:Nexus 解压
其中:
- nexus-3.30.0-01:此目录包含 Nexus 运行所需要的文件以及所有必需的其他组件,如启动脚本、依赖 jar 包等。
- sonatype-work:该目录包含所有由 Nexus 存储和管理的仓库,组件和其他数据。
启动 nexus 服务
我们可以在 nexus-3.30.0-01\bin 目录下发现一个名称位 nexus.exe 的可执行文件,它是在 Windows 平台上运行 Nexus 的启动脚本,该脚本包含了启动服务、停止服务、创建服务和删除服务等命令。
打开命令行窗口,跳转到 nexus-3.30.0-01\bin 目录下,执行以下命令,启动 Nexus 服务。
nexus /run
执行结果结果如图 3 所示,则表示 Nexus 启动完成。
图3:Nexus 3 启动完成
访问 nexus 3.x
启动完成后,在浏览器地址栏输入 http://localhost:8081/,访问 Nexus 界面,如图 4 所示。
图4:Nexus 3 用户界面
点击 Nexus 3.x 首页右上角的“Sign in”按钮,在登录页面输入用户名和 密码(默认用户名为 admin,默认密码则保存在 /sonatype-work/nexus3 目录下的 admin.password 文件中),点击“Sign in”按钮登录,如图 5 所示。
图5:Nexus 3 登录界面
登录成功后,结果如图 6 所示。
图6:Nexus 3 登录成功
Nexus离线更新中央仓库索引
我们知道 Nexus 可以远程下载和缓存中央仓库索引,但是对于国内用户来说,Nexus 远程更新索引使用的站点位于国外且部分索引文件较大,经常会出现下载速度缓慢或索引文件不完整等情况。下面我们将介绍一种更加快捷可靠的索引更新方式:离线更新中央仓库索引。
离线更新中央仓库索引,顾名思义,就是直接将索引文件下载,然后拷贝至 Nexus 工作目录中,以达到离线更新索引的目的。
离线更新中央仓库索引主要分为以下 3 步:
- 文件下载
- 解压
- 更新并验证索引
文件下载
首先,我们需要下载以下 3 个文件:
- nexus-maven-repository-index.gz
- nexus-maven-repository-index.properties
- indexer-cli-5.1.1.jar
1. 浏览器访问 https://repo.maven.apache.org/maven2/.index/ ,下载 nexus-maven-repository-index.gz 和 nexus-maven-repository-index.properties 两个文件(一般位于列表的末尾),如图 1 所示。
图1:Nexus 中央仓库离线索引下载列表
2. 浏览器访问 http://mvnrepository.com/,搜索 Indexer CLI,选择 Maven :: Indexer CLI,如图 2 所示。
图2:Nexus 索引生成器
3. 建议选择 5.1.1 版本,如图 3 所示。
图3:选择 Indexer CLI 版本
4. 在 Indexer CLI » 5.1.1 版本详情页,点击 View All,查看该版本包含的所有文件。
图4:Nexus indexer-cli 5.1.1 详情
5. 在文件列表中,点击 indexer-cli-5.1.1.jar ,下载该文件,如图 5 所示。
图5:Nexus indexer-cli 文件列表
解压
1. 将 nexus-maven-repository-index.gz 、nexus-maven-repository-index.properties 以及 indexer-cli-5.1.1.jar 三个文件都存放到 index(目录的名称及位置均为自定义,没有特殊规定)目录下,如图 6 所示。
图6:Nexus 中央仓库离线索引文件
2. 打开命令行窗口,跳转到 index 目录,执行以下命令,解压索引文件。
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
解压过程大约需要 10 分钟左右,请耐心等待,解压完成后,结果如图 7 所示。
图7:Nexus 中央仓库离线索引解压
3. 解压完成后,在 index 中会生成一个名为 indexer 的目录,该目录中存放的就是中央仓库离线索引文件,如图 8 所示。
图8:Nexus 离线索引文件
更新并验证索引
1. 将所有索引文件(不包含目录)全部拷贝到“Nexus\sonatype-work\nexus\indexer\central-ctx”目录中,如图 9 所示。
图9:Nexus 中央仓库索引目录
2. 重启 Nexus,在仓库列表中,选中 Central 代理仓库,然后点击 Browse Index 选项卡,结果如图 10 所示。
图10:Nexus 离线索引
3. 点击 browse Remote 选项卡,结果如图 11 所示。
图11:Nexus 远程索引
4. 对比 Browse Index 和 Browse Remote 中的索引,若两者完全一致,则表示离线索引更新成功。
需要注意的是,目前只有 Nexus 2.x 可以通过以上方式离线更新中央仓库索引,Nexus 3.x 暂不支持该功能。若想在 Nexus
3.x 中使用离线索引,我们建议您先在 Nexus 2.x 中离线更新索引后,再将数据迁移到 Nexus 3.x 中。
相关文章:
【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件
文章目录Nexus是什么Nexus下载和安装1. 进入 Nexus 2.x 下载页面,根据本机操作系统,选择对应的版本进行下载,如下图所示。2. 将下载 Nexus 安装包解压到本地磁盘,可获得 nexus-2.14.20-02 和 sonatype-work 2 个目录,如…...
凹凸贴图(Bump Mapping)
凹凸贴图是什么? 我们首先来看low-poly(多边形数较少)mesh和high-poly(多边形数量较多)mesh之间的不同。首先,最明显的不同就是high-poly能够表现出更多细节,但high-poly有比较大的性能开销。有…...
文华财经期货指标公式量化策略分析软件,多空共振信号准确率高的公式源码
期货指标公式信号本身就有滞后性,周期越大,滞后性越久。指标公式不是100%稳赚的工具,只是在合适的时候让我们理性看待行情,减少逆势操作。 多空量化三维系统是一款通过数学分析、挖掘价格运动规律,对历史价格走势、趋势…...
基于TCP协议的文件传输系统
最简单的一对一的服务端网络端通信(socket) Socket(IP地址:端口号),例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23) socket可以理解成计算机提供给程序员的接…...
Linux定时备份MySql数据库
一、创建文件 cd / mkdir mysqlbackup vi mysqlbackup.sh然后将下面的代码更改后复制上去即可。 #!/bin/bash mysqldump -uroot -ppassword database > /mysqlbackup/database__$(date %Y%m%d_%H%M%S).sqlpassword指的是MySql的密码,database指的是所要备份的…...
JavaScript prototype(原型对象)
JavaScript 的原型(prototype)是 JavaScript 中的一个重要概念。它是一种特殊类型的对象,每个 JavaScript 对象都有一个原型对象。原型对象在 JavaScript 中起着非常重要的作用。本文将详细介绍 JavaScript 原型对象的作用和在实际工作中的用…...
pytorch各种版本最简单安装,不用自己安装cuda cudnn
pytorch各种版本 pip 安装命令 查看官网 https://pytorch.org/get-started/previous-versions/ conda pytorch 安装 1、安装conda, 2、创建并并激活虚拟环境 - conda create -n pytorch_1.7 python3.7 - conda activate pytorch_1.7 3、虚拟环境中 pip 安装想要的…...
订单超时处理方案介绍
在电商场景下,一个订单流程中有许多环节要用到超时处理,包括但不限于: 买家超时未付款:比如超过15分钟没有支付,订单自动取消。 商家超时未发货:比如商家超过1个月没发货,订单自动取消。 买家…...
Blackbox-Exporter对服务进行探活
前言 blackbox-exporter会对HTTP、HTTPS、DNS、TCP、ICMP和gRPC上的端点进行黑盒探测。 Blackbox-Exporter blackbox-exporter暴露两个Metrics指标接口,分别是 /metrics、/probe,两个接口返回不同监控目标的指标 Metrics接口 返回exporter的构建信息…...
react-redux
Redux 是js容器,用于进行全局的 状态管理它可以用在react, angular, vue等项目中, 但基本与react配合使用三大核心: 单一数据源 整个应用的state被存储在一棵 object tree中,并且这个 object tree只存在于一个唯一的 store 中 State是只读的…...
算法刷刷刷| 回溯篇| 子集问题大集合
78.子集 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2],[1…...
合并两个有序数组-力扣88-java
一、题目描述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合…...
2022「大厂可观测」重磅回顾,12场直播,15位技术大咖洞见可观测
回首2022年,注定是意义非凡的一年。新冠疫情继续肆虐全球,中国疫情全面放开,神舟十四号与神舟十五号成功会师,俄乌冲突带来深远影响,阿根廷再次问鼎世界杯梅西圆梦,英国女王逝世......件件事都备受关注。 …...
CMMI-配置管理(CM)
一、概述配置管理(Configuration Management, CM)的目的在于使用配置识别、配置控制、配置状态记录与报告以及配置审计,来建立并维护工作产品的完整性。1、简介“配置管理”过程域涉及以下活动:• 识别所选工作产品的配…...
网络编程套接字Socket
一.什么是网络编程网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。二.为什么要实现网络编程我们通过网络编程可以在网络中获取资源,实质是通过网络,获…...
Linux进程概念(二)
进程状态1.阻塞和挂起2.R运行状态和S睡眠状态3.T停止状态4.X死亡状态和Z僵尸状态🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Linux的学习】 📝📝本…...
墨天轮【第二届数据库掌门人论坛】圆满收官 | 含嘉宾精彩观点回顾
2月10日上午,墨天轮【2023春季发布会暨第二届数据库掌门人论坛】盛大开启,本次活动的主题为“新征程,向未来”,共包含2022年度中国数据库颁奖盛典、2022年度行业发展报告发布以及第二届数据库掌门人论坛三项议程。华为云数据库服务…...
Redis之集群搭建
redis的集群模式简介: redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。 集群搭建步骤如下 (一台服务器模拟多台服务器) 1.创建6个配置…...
31-Golang中的二维数组
二维数组的使用方式 使用方式一:先声明/定义再赋值 1.语法:var数组名 [大小] [大小]类型2.比如:var arr [2] [3]int,再赋值 package main import ("fmt" )func main() {//定义/声明数组var arr [4][6]int//赋初值arr[1][2] 1ar…...
<<Java开发环境配置>>6-SQLyog安装教程
一.SQLyog简介: SQLyog 是一个快速而简洁的图形化管理MySQL数据库的工具,它能够在任何地点有效地管理你的数据库,由业界著名的Webyog公司出品。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。 二.SQLyog下载: 下载地址…...
MySQL 中的 distinct 和 group by 哪个效率更高
先说大致的结论(完整结论在文末):在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 …...
计算机相关专业毕业论文选题推荐
计算机科学以下是我推荐的20个计算机科学专业的本科论文选题:基于机器学习的推荐算法研究与实现基于区块链技术的数字身份认证方案设计与实现基于深度学习的图像识别技术研究与应用基于虚拟现实技术的教育培训平台设计与实现基于物联网技术的智能家居系统研究与开发…...
网络编程套接字之TCP
文章目录一、TCP流套接字编程ServerSocketSocketTCP长短连接二、TCP回显服务器客户端服务器客户端并发服务器UDP与TCP一、TCP流套接字编程 我们来一起学习一下TCP socket api的使用,这个api与我们之前学习的IO流操作紧密相关,如果对IO流还不太熟悉的&am…...
网络与串口调试工具TCPCOM
TCPCOM,网络与串口二合一调试助手,将网络调试助手与串口调试助手合二为一,绿色软件,简单高效。【软件特色】 1. 支持中英文双语言,自动根据操作系统环境选择系统语言类型; 2. 支持ASCII/Hex发送,发送和接收…...
数据库常用命令
文章目录1. 数据库操作命令1.进入数据库2.查看数据库列表信息3.查看数据库中的数据表信息2.SQL语句命令1. 创建数据表2. 基本查询语句3. SQL排序4. SQL分组统计5. 分页查询6. 多表查询7.自关联查询8.子查询1. 数据库操作命令 1.进入数据库 mysql -uroot -p2.查看数据库列表信…...
PTA复习
函数 6-1 学生类的构造与析构 #include<bits/stdc.h> using namespace std; class Student {int num;string name;char sex; public:Student(int n,string nam,char s):num(n),name(nam),sex(s){cout<<"Constructor called."<<endl;}void display…...
TypeScript 学习之接口
接口:对值所具有的结构进行类型检查,称为“鸭式变型法”或“结构性子类型化” 基本使用 interface LabelledValue {label: string; }function printLabel(labelledObj: LabelledValue) {console.log(labelledObj.label); }let myObj {size: 10, label:…...
原码反码补码
在计算机中,负数都是以补码的形式存放的, 正数的原码、反码、补码完全一致。 原码:指的是正数的二进制或负数的二进制, 负数的二进制(原码),其实就是在正数的二进制的最高位前面加一个符号位 1。…...
大数据选股智能推荐系统V1.0-1
很长时间没有发布博客了,这段时间个人确实有点忙。另外一方面在这段时间我也没有闲着。自己研发了一套大数据选股的智能推荐系统。废话不说,我们先来看这套系统:登录页面:(技术点:验证码的生成)…...
调研生成GIF表情包之路
调研阶段 gifshot.js合成GIF 可以从媒体流、视频或图像创建动画 GIF 的 JavaScript 库。 csdn地址:https://blog.csdn.net/qq_16494241/article/details/125717405 分解GIF图片、合成GIF图片 两步走: 1、分解GIF图片 libgif-js:JavaScrip…...
www 上海网站建设/南昌搜索引擎优化
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处作者:流云编辑:流云链接:https://news.mydrivers.com/1/687/687718_all.htm#2来源:快科技 2020-05-07 21:00:39一、前言:时代变了 入门…...
网站建设需求原型/hao123影视
文章来源:Python小例子告别枯燥,通过学习有趣的小例子,扎实而系统的入门Python,从菜鸟到大师,个人觉得这是很靠谱的一种方法。通过一个又一个的小例子,真正领悟Python之强大,之简洁,…...
做网站要求什么条件/广州网站建设技术外包
2019独角兽企业重金招聘Python工程师标准>>> 我们经常看到大网站支持逗号分隔的CSS,JS加载,例如: link type"text/css" rel"stylesheet" href"http://s.juancdn.com/juanpi/css/??base.css,globale.css,md-busine…...
超炫的网站/网络推广策划方案怎么写
1:java 的最大特点及实现原理跨平台实现原理:java首先利用文本编辑器编写java源程序,源文件的后缀名为.java;再利用编译器(javac)将程序编译为字节码文件,字节码文件的后缀名.class;…...
那个网站是响应式的/企业营销策划
博主说:在本篇文章中,马化腾先生亲口讲述了自己的创业史,回顾了早期创业之艰辛、公司生存之法则,从“创业维艰、自我颠覆、产品思维和最大担忧”四个方面分别进行了阐述,值得每一个互联网人为之深思。 正文 创业维艰 我…...
家居网站开发项目计划书/网络推广怎么做效果好
IBM SPSS Statistics为用户提供了三种相关性分析的方法,分别是双变量分析、偏相关分析和距离分析,三种相关分析方法各针对不同的数据情况,接下来我们将为大家介绍如何使用SPSS相关性分析中的距离分析。 一、数据简述 距离分析和其他两类相关…...