资讯专栏INFORMATION COLUMN

RAINBOND源码构建JAVA项目配置MAVEN仓库

MockingBird / 3477人阅读

摘要:清除构建缓存为每一个服务的构建环境提供缓存,项目会对的安装目录,配置目录,和本地仓库目录提供了缓存,用户通过以下设置清理缓存。本文档详细介绍了源码构建项目时的各种详细设置与操作。

概述

根据大量的Rainbond用户反馈,我们发现在Rainbond源码构建java-maven项目的过程中,最容易出现问题的一环就是获取构件失败。

比如:

[ERROR] Failed to execute goal on project bq-insurance-third-party: Could not resolve dependencies for project···

这样的报错。

本文档将详细说明,如何作出正确的配置去获取项目需要的构件。还有,针对“我在本地可以构建,为何在Rainbond无法构建?”这样的疑问作出解答。

阅读本文档,需要读者对Rainbond构建Java Maven项目原理有一定的理解。

下载与安装Maven

Rainbond默认提供多种maven版本供用户选择,对应版本及相应的资源地址获取见下表:

Maven版本 获取地址
3.3.1 http://lang.goodrain.me/jvm/m...
3.0.5 http://lang.goodrain.me/jvm/m...
3.1.1 http://lang.goodrain.me/jvm/m...
3.2.5 http://lang.goodrain.me/jvm/m...
3.3.9 http://lang.goodrain.me/jvm/m...
如果遇到Maven构建失败,请优先确认当前maven版本有关。如果不能确定,可以下载上述资源,尝试在本地构建。
清除构建缓存

Rainbond为每一个服务的构建环境提供缓存,Maven项目会对maven的安装目录,配置目录,和本地仓库目录提供了缓存,用户通过以下设置清理缓存。

访问http://<管理节点>:8081/artifactory/list/libs-release/或者管理节点访问maven.goodrain.me看能否列出你新添加的构件。

如果用户已经拥有完整可用的repository文件夹,也可以使用 import 功能将整个仓库完整上传到repo-local本地仓库中去。

完整上传提供了两种方式:从目录挂载导入,或者上传zip。其中第一种方式需要注意的是,上传的路径是要在rbd-repo容器中的路径上传,所以需要事先执行路径挂载。第二种方式,则需要注意文件上传大小限制,该值可以在admin —— Configuration——General Configuration 中设置。

我在本地可以构建,为何在Rainbond无法构建?

通读本篇文档,我们可以发现执行maven构建需要注意的细节很多,这些微小的细节都可能导致构建失败。

但是可以肯定的一点就是,在本地可以构建,那么在网络条件相同的Rainbond环境中就可以构建。因为Rainbond执行源码构建时,使用的原理和普通的maven构建并无不同。需要注意的,就是构建环境上微小的差别。

以下是遇到这样的疑惑时,排查的思路:

版本差异:
这个差异包括了maven版本的差异,也包括JDK的版本差异(即使是同个大版本下不同的小版本)。遇到无法确定原因的报错,这将是首要需要检查的方面。有关JDK版本如何选择,以及出现版本差异影响如何处理,请参见文档: RAINBOND源码构建JAVA项目选取JDK

GZIP STDIN NOT IN GZIP FORMAT:
构建日志如这种报错,基本可以确定为获取JDK或Maven安装包失败,结合文档 源码构建提示GZIP STDIN NOT IN GZIP FORMAT 加以解决。

构建缓存:
再次强调,用户应该在首次构建成功前一直开启清除构建缓存直至构建成功。这样可以防止缓存到了不完整或者错误的包,导致构建一直失败。切记,构建会优先去缓存中获取构件。

获取构件失败:
这个问题的答案并不惟一,可能出现的情况非常多。

首先,结合构建日志中构件下载地址,来判断获取构件失败时,是否使用仓库私服,使用的是默认私服(maven.goodrain.me)抑或是用户自定义私服(用户自行指定的artifactory或nexus)。

如果禁用Mirror功能,则默认使用中央仓库。这时需要判断网络是否可以访问到中央仓库,当前构件是否在中央仓库中存在。

如果未禁用Mirror功能,并且使用了Rainbond默认仓库私服(maven.goodrain.me),则默认代理中央仓库。这时需要判断网络是否可以访问到中央仓库,当前构件是否在中央仓库中存在。

如果未禁用Mirror功能,并且使用了用户自定义私服。则需要判断网络是否可以访问到指定的仓库私服,当前构件是否在指定仓库私服中存在。

401认证失败:
如果构建报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project dx-id: Failed to deploy artifacts: Could not transfer artifact com.dx.application:dx-id:pom:0.0.1-20190727.012351-2 from/to snapshots (http://******:8081/artifactory/libs-release): Failed to transfer file: http://*******:8081/artifactory/libs-release/com/dx/application/dx-id/0.0.1-SNAPSHOT/dx-id-0.0.1-20190727.012351-2.pom. Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]

说明访问用户指定的仓库私服是需要认证信息的,而认证信息一般储存在用户日常使用的 setting.xml 文件中。故而,解决这个问题最好的方式,是使用上文中提到的 自定义Setting.xml 的方式。再次强调, 自定义Setting.xml 是作为终极解决方案存在的,同样适用于其他由于用户仓库私服特殊设置所导致的构件获取失败。

我的仓库足够我的项目构建所需,却依然报错有构件找不到:
Rainbond默认的 Maven构件全局参数clean dependency:list install 。需要注意的是,dependency:list 需要下载特定的maven plugin,故而,当用户处于一个离线环境,并且使用的私服中没有对应的构件时,必然会发生构建失败的情况。请更改为 clean install

使用rbd-repo代理了其他仓库私服:
用户是可以使用rbd-repo组件来代理其他的远程仓库私服的。但是不同的仓库私服之间传输构件有可能会出现奇奇怪怪的问题。故而,我们推荐用户使用 MAVEN MIRROR URL直接指定远程仓库地址,而不是使用rbd-repo代理。

总结

我在本地可以构建,为何在Rainbond环境下无法构建?这个疑问是用户在使用源码构建功能出现问题时最常向我们提出的一个疑惑。甚至也有过用户因此放弃Rainbond的例子,我们对此感到难过。不可否认,源码构建这个功能涉及的知识点相对于其他功能而言,更加的广泛深奥、晦涩难明。

但是需要指出的是,Rainbond Java-Maven所使用的构建原理,与普通的Maven构建原理是一致的。所以从本质上讲,在本地可以构建,在Rainbond环境下就一定可以构建,但是构建环境的设置,构件如何获取等等细节的差别,对于构建结果的影响是非常大的。所以使用Rainbond源码构建Java-Maven项目,最重要的一点,就是找到这些细微的差别,抹平本地环境与Rainbond构建环境的不同。

本文档详细介绍了Rainbond源码构建Java-Maven项目时的各种详细设置与操作。其中很多细节都已经罗列出来, 可以算作是源码构建失败时排查问题的详细思路总结。希望Rainbond的用户在通读整篇文档后,对于Rainbond源码构建功能有更深刻的了解。

本文作者: 好雨科技交付工程师 郭逊

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76067.html

相关文章

  • Rainbond 5.1.3发布,快速部署和运维spring cloud集群

    摘要:监控项目进一步完善集群和服务监控和报警必然是运维同仁们的重点关注功能。系统服务注册功能改进,基于健康检查实现注册的自动上线和下线,解决错误的添加管理节点导致镜像仓库等服务负载均衡错误问题。修复了镜像错误导致检测失败后未提供后续操作的问题。 Rainbond 5.1.3发布,快速部署和运维spring cloud集群 今天为大家带来Rainbond 5.1系列第三个更新版本,本次版本更新...

    fanux 评论0 收藏0
  • Rainbond v5.1.2发布,微服务架构应用便捷管理和交付

    摘要:发布,微服务架构应用便捷管理和交付是开源的企业应用云操作系统,支撑企业应用的开发架构交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源可以对接和管理虚拟机和物理服务器。 Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发、架构、交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源...

    miguel.jiang 评论0 收藏0
  • Rainbond v5.1.2发布,微服务架构应用便捷管理和交付

    摘要:发布,微服务架构应用便捷管理和交付是开源的企业应用云操作系统,支撑企业应用的开发架构交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源可以对接和管理虚拟机和物理服务器。 Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发、架构、交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源...

    AdolphLWQ 评论0 收藏0
  • Rainbond v5.1.2发布,微服务架构应用便捷管理和交付

    摘要:发布,微服务架构应用便捷管理和交付是开源的企业应用云操作系统,支撑企业应用的开发架构交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源可以对接和管理虚拟机和物理服务器。 Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发、架构、交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源...

    hzc 评论0 收藏0
  • Rainbond v5.1.2发布,微服务架构应用便捷管理和交付

    摘要:发布,微服务架构应用便捷管理和交付是开源的企业应用云操作系统,支撑企业应用的开发架构交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源可以对接和管理虚拟机和物理服务器。 Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发、架构、交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资源...

    wuyangchun 评论0 收藏0

发表评论

0条评论

MockingBird

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<