场景回顾:

应用客户端如果需要接入到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.仔细阅读了一下《分布式部署指南》中的最后一部分

https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97

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私服上时遇到的问题及排查过程的更多相关文章

  1. 【Maven】2.使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

    参考文章: http://www.cnblogs.com/luotaoyeah/p/3791966.html --------------------------------------------- ...

  2. 使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

    1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多. 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 ...

  3. maven私服上传jar包

    将一下脚本保存在.bat文件执行,红色部分按实际情况修改: @echo off set groupId=com.xxxset artifactId=xxxset version=0.0.1set ja ...

  4. maven 私服上有jar包但是却下载不下来

    解决办法: 在parent中执行deploy命令就解决了. 原因:第一次建项目,上传jar包的时候直接进入到该项目中进行deploy到私服.最终发现私服仓库有,但是别人引用的时候无法下载.是因为别人下 ...

  5. nexus搭建maven私服及私服jar包上传和下载

    nexus搭建maven私服及私服jar包上传和下载 标签: nexus管理maven库snapshot 2017-06-28 13:02 844人阅读 评论(0) 收藏 举报 分类: Maven(1 ...

  6. 搭建Maven私服那点事

    摘要:本文主要介绍在CentOS7.1下使用nexus3.6.0搭建maven私服,以及maven私服的使用(将自己的Maven项目指定到私服地址.将第三方项目jar上传到私服供其他项目组使用) 一. ...

  7. CentOS中用Nexus搭建maven私服,为Hadoop编译提供本地镜像

    系统: CentOS release 6.6 (Final) Nexus:nexus-2.8.1-bundle.tar.gz,下载地址:https://sonatype-download.global ...

  8. 掌握 Maven 私服

    前言 在 Java EE 开发中,我们使用 Maven 构建工具主要来管理项目的第三方库的依赖,以及公司内部其他项目服务的依赖.因此 Maven 私服就是必不可少的一环,本文主要对 Maven 私服的 ...

  9. 搭建自己的maven私服 必过

       教你一步一步搭建自己的maven私服 一. 应用场景 有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私 ...

随机推荐

  1. android从放弃到坚持放弃第二课(下)

    续第二课( 下) 续第二课 下 活动的生命周期 返回栈 活动状态 活动的生存期 体验活动的生命周期 活动被回收怎么办 活动的启动模式 standard singleTop singleTask sin ...

  2. Hadoop1.2.1 出现Warning: $HADOOP_HOME is deprecated.的解决方案

    通过启动或停止hadoop我们会发现会出现 “Warning: $HADOOP_HOME is deprecated” 这样一个警告,下面给出解决方案: 不过我们一般推荐第二种,因为我们还是需要$HA ...

  3. laravel 添加 404 页面

    1)使用 laravel 抛出 404 头很简单 abort(404); 还可以添加描述 abort(404, '404 File Not Fund'); 2)如果想自定义 404 页面模版,直接添加 ...

  4. 高级service之ipc ADIL用法

    感谢 如果你还没有看过前面一篇文章,建议先去阅读一下 Android Service完全解析,关于服务你所需知道的一切(上) ,因为本篇文章中涉及到的代码是在上篇文章的基础上进行修改的. 在上篇文章中 ...

  5. 最受欢迎的五大BUG管理系统

    五大最受欢迎的BUG管理系统    Google在中国大*陆遭遇变故做出暂时性的退出大*陆市场,也使很多忠实的用户受到小小的挫折,以本公司为例,原本的BUG都是记录在google的EXCEL在线文档中 ...

  6. IOS模拟器

    IOS模拟器 目录 概述 实用操作 概述 实用操作 快速删除大量程序的方式 菜单栏 -> Reset Contain And Settings 或者:直接删除模拟器应用里面的想要去除的应用程序的 ...

  7. javascript 禁止页面选取-兼容IE、Chrome和firefox浏览器

    在做到一个页面需要禁止网页内容被选取的时候,碰到浏览器兼容的问题,解决方法如下 1.单独使用适用于IE.Chrome浏览器,主要是在head的<script>标签里面加上如下代码 docu ...

  8. Python闲谈(一)mgrid慢放

    不论是利用Mayavi还是matplotlib绘制三维图表,里面都用到了numpy中的一个函数叫mgrid.本次博客我简单地讲一下mgrid是干什么用的,以及一个三维曲面是如何绘制出来的. 首先说明一 ...

  9. 160601、Websocet服务端实现

    今天是六一儿童节,祝愿小朋友们节日快乐!大朋友们事事顺心! Websocet服务端实现 WebSocketConfig.Java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  10. django post 403解决之道(最新版Django)

    写了一个方法,丢出一个post请求,发现报403 百度解决方案: 按提示及google结果修改setting.py,在MIDDLEWARE_CLASSES增加django.middleware.csr ...