部署apollo-client到maven私服上时遇到的问题及排查过程
场景回顾:
应用客户端如果需要接入到Apollo配置服务中心的话,需要引用apollo-client的依赖包使之与config-server保持连接,从而可以及时的收到更新之后的配置信息。
1.将apollo-client项目打包部署到自己公司的maven私服上去
在eclipse上部署maven项目到私服上去执行mvn clean package deploy命令,报错如下:
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.:deploy (default-deploy) on project apollo-client: Failed to deploy artifacts:
Could not transfer artifact com.phicomm.smarthome:apollo-client:jar:0.0.-20180604.034828- from/to snapshots (http://your.company.maven/repository/maven-snapshots/)
: Failed to transfer file: http://your.company.maven/repository/maven-snapshots/com/phicomm/smarthome/apollo-client/0.0.-SNAPSHOT/apollo-client-0.0.-20180604.034828
-.jar. Return code is: , ReasonPhrase: Unauthorized. -> [Help ]
在执行命令部署的时候提示没有部署成功,分析上面的错误信息后找到了原因,是因为在向私服传包的时候需要认证。
打开/Users/lingye/Project/maven/apache-maven-3.5.0/conf/settings.xml,发现配置还都是默认的...
<server>
<id>siteServer</id>
<privateKey>/path/to/private/key</privateKey>
<passphrase>optional; leave empty if not used.</passphrase>
</server>
Maven 知识回顾:
- maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。
- maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,其他项目在依赖此项目的时候直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
- 如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
我们把上面的注释掉后配置我们自己的服务器,并填入账号密码。
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
注意这里配置的server的id必须和pom文件中的distributionManagement对应仓库的id保持一致,maven在处理发布时会根据id查找用户名称和密码进行登录和文件的上传发布。
并且在自己的项目中加入发布到私服的配置。
<distributionManagement>
<repository>
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://you.company.com:5050/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://you.company.com:5050/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
经过上面的配置 我们在eclipse中使用package deploy部署成功
然后我们在apollo客户端尝试引用试试,项目没有启动成功报错提示没有引入core 没有找到Tracer而报错了
2.咦,官网上命名说只依赖apollo-client就可以的,怎么还要依赖apollo-core包?
我又用上面的方法将core包发布到私服上面,而后在客户端再次引入它,这下项目可以跑起来了,但是又找不到配置文件,但是我已经在启动时加了-Denv=DEV,我尝试使用-Ddev_meta=http://localhost:8080,这样是可以的。
机智的我发现怎么跟文档上说的不一样,脑袋一转发现问题并没有这么简单。
3.仔细阅读了一下《分布式部署指南》中的最后一部分
mvn clean deploy -DskipTests -pl apollo-client -am $META_SERVERS_OPTS -pl(--projects <arg>) 手动选择需要构建的项目,项目间以逗号分隔;
-am(--also-make) 构建指定模块,同时构建指定模块依赖的其他模块;
正规的流程是在项目外层的scripts/build.sh 来构建项目
在此脚本的最后一段命令中将包部署上去的。
我们也来试一试,当然第一次也是失败了。
Failed to deploy artifacts/metadata: Cannot access ${snapshots.repo} with type default using the available connector factories: BasicRepositoryConnectorFactory:
Cannot access ${snapshots.repo} using the registered transporter factories: WagonTransporterFactory: Unsupported transport protocol
这是因为没有在setting.xml中配置发布项
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<releases.repo>http://you.company.com:5050/repository/maven-releases/</releases.repo>
<snapshots.repo>http://you.company.com:5050/repository/maven-snapshots/</snapshots.repo>
</properties>
</profile>
这次发布成功,在客户端中只依赖一个apollo-client然后重新导入,会发现一下会引用过来两个包apollo-client和apollo-core以及meta_info也会打入到core包中,我们启动的时候只需要加上-Denv=DEV即可顺利启动了。
总结:没有认真阅读开源官方给出的说明文档,下次要认真!
部署apollo-client到maven私服上时遇到的问题及排查过程的更多相关文章
- 【Maven】2.使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
参考文章: http://www.cnblogs.com/luotaoyeah/p/3791966.html --------------------------------------------- ...
- 使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多. 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 ...
- maven私服上传jar包
将一下脚本保存在.bat文件执行,红色部分按实际情况修改: @echo off set groupId=com.xxxset artifactId=xxxset version=0.0.1set ja ...
- maven 私服上有jar包但是却下载不下来
解决办法: 在parent中执行deploy命令就解决了. 原因:第一次建项目,上传jar包的时候直接进入到该项目中进行deploy到私服.最终发现私服仓库有,但是别人引用的时候无法下载.是因为别人下 ...
- nexus搭建maven私服及私服jar包上传和下载
nexus搭建maven私服及私服jar包上传和下载 标签: nexus管理maven库snapshot 2017-06-28 13:02 844人阅读 评论(0) 收藏 举报 分类: Maven(1 ...
- 搭建Maven私服那点事
摘要:本文主要介绍在CentOS7.1下使用nexus3.6.0搭建maven私服,以及maven私服的使用(将自己的Maven项目指定到私服地址.将第三方项目jar上传到私服供其他项目组使用) 一. ...
- CentOS中用Nexus搭建maven私服,为Hadoop编译提供本地镜像
系统: CentOS release 6.6 (Final) Nexus:nexus-2.8.1-bundle.tar.gz,下载地址:https://sonatype-download.global ...
- 掌握 Maven 私服
前言 在 Java EE 开发中,我们使用 Maven 构建工具主要来管理项目的第三方库的依赖,以及公司内部其他项目服务的依赖.因此 Maven 私服就是必不可少的一环,本文主要对 Maven 私服的 ...
- 搭建自己的maven私服 必过
教你一步一步搭建自己的maven私服 一. 应用场景 有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私 ...
随机推荐
- Yii2发送邮箱总结
修改配置文件,普通版在(config/web.php).高级版默认配置在/common/config/main-local.php 'components' => [ 'mailer' => ...
- Android studio 添加admob googgle play services
Android studio 添加admob googgle play services MainActivity import com.google.android.gms.ads.AdReques ...
- LoadRunner学习---脚本编写(4)(比较重要)
今天接着来翻译http://www.wilsonmar.com/中关于LoadRunner脚本编写部分,下面该翻译脚本编写中一些比较重要的部分了. Web用户Action 在VuGen中,脚本产生的默 ...
- Invalid property 'driverClassName' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]
spring配置文件中配置c3p0错误,错误原因在于c3p0连接池与DBCP连接池在驱动.连接.数据库用户名这些属性名称的差别
- 四个dos命令检查你的电脑是否中木马
一些基本的命令往往可以在保护网络安全上起到很大的作用,下面几条命令的作用就非常突出. 命令是再CMD中输入,不是运行框中 一.检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中了病毒,但 ...
- Python--进阶处理3
# ===================第三章:数字日期和时间==================== # ---------------------数字的四舍五入----------------- ...
- python--生成测试数据
1.方法 import datetime params_dict_data = { "system_id":"systemId001", "order ...
- ubuntu下安装myeclipse+破解
1.给myeclipseInstaller.run权限 chmod myeclipseInstaller.run 2.安装(结束时不启动,去掉√) ./myeclipseInstaller.run 3 ...
- JavaBean的任务就是: “Write once, run anywhere, reuse everywhere” Enterprise JavaBeans
javaBean_百度百科 https://baike.baidu.com/item/javaBean/529577?fr=aladdin 区别EJB JavaBean 和 Server Bean(通 ...
- Writing a Discard Server 写个抛弃服务器 世上最简单的协议
Netty.docs: User guide for 4.x https://netty.io/wiki/user-guide-for-4.x.html The most simplistic pro ...