部署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 来构建项目
   在此脚本的最后一段命令中将包部署上去的。

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

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即可顺利启动了。

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

  

转载于:https://www.cnblogs.com/lingyejun/p/9145179.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。而Apollo是携程开源的一款分布式配置中心,可以用于管理和配置应用程序的各种配置信息。下面是使用Docker Compose部署Apollo的步骤: 1. 创建一个名为`docker-compose.yml`的文件,并在其中定义Apollo服务的配置。以下是一个示例配置: ```yaml version: '3' services: apollo-configservice: image: apolloconfig/apollo-configservice ports: - 8080:8080 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=your_username - SPRING_DATASOURCE_PASSWORD=your_password - DEV_META=http://localhost:8080 apollo-adminservice: image: apolloconfig/apollo-adminservice ports: - 8090:8090 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=your_username - SPRING_DATASOURCE_PASSWORD=your_password - DEV_META=http://localhost:8080 apollo-portal: image: apolloconfig/apollo-portal ports: - 8070:8070 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=your_username - SPRING_DATASOURCE_PASSWORD=your_password - DEV_META=http://localhost:8080 ``` 2. 根据实际情况修改上述配置中的数据库连接信息和端口映射。 3. 在终端中进入包含`docker-compose.yml`文件的目录,并运行以下命令启动Apollo服务: ```bash docker-compose up -d ``` 4. 等待一段时间,直到所有容器都成功启动。可以使用以下命令检查容器的状态: ```bash docker-compose ps ``` 5. 通过浏览器访问Apollo的管理界面,地址为`http://localhost:8070`。在管理界面中可以进行配置管理和发布等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值