部署apollo-client到maven私服上时遇到的问题及排查过程

简介: 部署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.2:deploy (default-deploy) on project apollo-client: Failed to deploy artifacts: 
Could not transfer artifact com.phicomm.smarthome:apollo-client:jar:0.0.1-20180604.034828-34 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.1-SNAPSHOT/apollo-client-0.0.1-20180604.034828
-34.jar. Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]

在执行命令部署的时候提示没有部署成功,分析上面的错误信息后找到了原因,是因为在向私服传包的时候需要认证。

打开/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 来构建项目

  在此脚本的最后一段命令中将包部署上去的。

我们也来试一试,当然第一次也是失败了。

mvn clean deploy -DskipTests -pl apollo-client -am $META_SERVERS_OPTS
-pl(--projects <arg>) 手动选择需要构建的项目,项目间以逗号分隔;
-am(--also-make) 构建指定模块,同时构建指定模块依赖的其他模块;

这是因为没有在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即可顺利启动了。

总结:没有认真阅读开源官方给出的说明文档,下次要认真!


目录
相关文章
|
5天前
|
Java Linux Maven
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
106 3
|
5天前
|
Java Linux Maven
私有仓库工具Nexus Maven如何部署并实现远程访问管理界面
私有仓库工具Nexus Maven如何部署并实现远程访问管理界面
72 0
|
8月前
|
搜索推荐 Java 应用服务中间件
【Maven】IDEA部署配置Maven项目教程,IDEA配置Tomcat(2019.3.3)(2023.1.3)
当涉及到软件开发和项目管理时,使用一个可靠的构建工具是非常重要的。Maven是一个广泛使用的构建工具,它为Java项目提供了一种简化的构建过程和依赖管理。 在本文中,我们将探讨如何部署Maven并开始使用它来构建您的项目。我们将介绍所需的步骤,并向您提供一些有用的提示和建议。
【Maven】IDEA部署配置Maven项目教程,IDEA配置Tomcat(2019.3.3)(2023.1.3)
|
7月前
|
Java 应用服务中间件 Apache
Apache Maven项目的搭建与部署
Apache Maven项目的搭建与部署
209 0
|
5天前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
196 0
|
5天前
|
存储 Java Linux
Nexus【部署 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
Nexus【部署 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
143 0
|
5天前
|
XML Java 应用服务中间件
spring和maven(profile)的多环境部署
spring和maven(profile)的多环境部署
54 0
|
6月前
|
前端开发 Java 应用服务中间件
IntelliJ IDEA(简称Idea) 基本常用设置及Maven部署---详细介绍
IntelliJ IDEA(简称Idea) 基本常用设置及Maven部署---详细介绍
106 0
|
6月前
|
XML Java 测试技术
如何将maven部署在Idea的教学,和idea介绍
如何将maven部署在Idea的教学,和idea介绍
|
6月前
|
XML 存储 Java
Maven介绍,部署在eclipse中
Maven介绍,部署在eclipse中

热门文章

最新文章

推荐镜像

更多