场景回顾:

应用客户端如果需要接入到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. YII2与Thinkphp整合阿里云OSS

    前言: 如果上传的文件都和网站程序源代码放在一起:那是有相当多的弊端的: 1:静态文件会占用大量带宽: 2:服务器的成本略高: 常规的做法是把php源代码放到一台服务器上:图片等静态文件放在另一台服务 ...

  2. Mac终端Screen命令使用指南

    (1)创建会话 使用命令“screen -S RunWork”来创建一个screen会话,命令执行之后,就会得到一个新的shell窗口,为了便于标示可以用快捷键Ctrl-a A(就是按下Ctrl+a键 ...

  3. python3----datetime模块分析

    datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类,分别是 1.datetime ...

  4. ionic跳转(二)

    1)网上说要想在js里跳转用,$state.go()方法,但找了大半天都没找到在ionic使用$state的方法 2)要想用js跳转,直接用原生js跳转也是可以的 location.href='#ho ...

  5. Java线程之CompletionService批处理任务

    如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...

  6. Delphi 编译/链接过程

     

  7. Erstudio8.0怎么用?Erstudio8.0汉化版详细使用教程

    Erstudio8.0使用教程 打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimension ...

  8. 【BZOJ2879】[Noi2012]美食节 动态加边网络流

    [BZOJ2879][Noi2012]美食节 Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食 ...

  9. jquery如何为元素设置style?

    $("#userLevelCss").attr("style","width:78%;float: right;display: none;" ...

  10. js如何计算当前日期的前一个月和后一个月?

    <div class="query_title_div"><img src="../../images/task/before.png"/&g ...