来自我的 Blog Danny's Dream

起因

最近在给公司的 SDK ,做一个 maven 的仓库,方便 CP 嵌入。花了整两天的时间,身为移动开发的我之前没怎么接触过服务器相关的内容,这里做一个记录和分享, 并且网上大部分的教程都是如何搭建本地仓库的
用到了以下几个内容

  • Artifactory jfrog 家的用来做仓库管理和持续集成【配合 Jenkins 】的工具 免费版就够用了 【支持 maven gradle】
  • Maven Maven是Java开发者中流行的构建工具,Maven的好处之一是可以帮助减少构建应用程序时所依赖的软件构件的副本,Maven建议的方法是将所有软件构件存储于一个叫做repository的远程仓库中。
  • Gradle 是 Android Studio 中带的自动化构建工具 是 maven 的扩展
  • Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,用来处理代理的。

之前没有怎么操作过 Linux 的服务器,这次经历还是很有趣的,把遇到的问题记录一下。

连接主机

运维提供的服务器是 Linux 的,通过 ssh 方式来连接服务器。

ssh xxx.xxx.xxx.xxx复制代码

这一步遇到的问题是 公司的 Linux 登录验证是提供了一个 私有的 ssh key,
我本地配置的是 GitHub 的 ssh key,默认连接的时候用的是 GitHub 的 key。
运维给出的方式是通过 -i 加上 key 的路径来登陆。

ssh -i dan-key xxx.xxx.xxx.xxx复制代码

这样的方式虽然可以,但是每次都这么输入未免太麻烦了。
网上查了,提供了以下的方式解决的我的需求。
在 .ssh 文件下面建一个 config 文件如下配置

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa # maven
Host 192.168.111.11
User liudan
PreferredAuthentications publickey
IdentityFile ~/.ssh/liudan-server复制代码

这样就能完美解决了多 ssh key 的登录情况。

安装 Artifactory

Artifactory 的官网 www.jfrog.com/open-source…
通过 java - version 检查 java 环境
他需要的是 java8 的环境,如果没有的话,要先给服务器搭建 jdk8 的环境。
但是里面的下载好像不能通过,Linux 的 wget 指令直接在服务器内部进行下载。
我是在本地下载完之后,通过 scp 指令再拷贝到服务器的【这里也需要 ssh key】
移动到服务器之后,通过 unzip 解压。
得到下面的内容

进入到 bin 文件夹中有

注意三个文件:

  • artifactory.sh 用来直接运行 artifactory 的进程,运行之后就会打开 tomcat ,并且部署一个可视化的网页

    http:///artifactory/webapp/#/home你的ip>复制代码
  • installService.sh 这个是用来安装 artifactory 的服务,可以作为服务在后台自动运行,并会随服务器一起启动【我猜的。。我看他是移动到了init的目录下面】
  • artifactoryManage.sh 是用来做服务管理的提供几种方式
       {start|stop|restart|redebug|status|check} 这个就不翻译了,可以看到当前的状态。使用方法这样  ./artifactoryManage.sh check  加命令复制代码

注意的地方:
一般的教程都是让你,直接执行 artifactory.sh 就可以启动了。其实服务端更多的时候希望他是作为后台常驻的。
所以这里我们要执行的 installService.sh 脚本
执行完之后 会看到给我们的提示帮我们移动到了 /etc/init.d/artifactory 目录中
通过这两个指令可以检查和启动后台的服务。
/etc/init.d/artifactory check
/etc/init.d/artifactory start

这里要注意 artifactory.default 中的 user 的配置 !
默认的是设置为 artifactory 的,但是 artifactory 用户的权限不够【可能是我们服务器配置的原因】,
会导致 /etc/init.d/artifactory start 由于权限不够而无法启动 tomcat 的。这是当时困扰了我很久问题。

按照上面的操作,你应该已经能看到 Artifactory 的界面了
刚进去的时候会让你设置 admin 密码,同时设置仓库类型。
都完成之后是这样的界面:

这里学到了如下几个 Linux 指令

ps -ef | grep artifactory复制代码

ps -ef 查看所有的进程,通过 grep 进行过滤,可以看到和 artifactory 相关的进程,拿到 pid 之后
通过

kill -9 目标id复制代码

就可以停止目标进程

Lib 的上传

下面的内容就相对简单了。
在你的 lib 的工程的 build.gradle 中增加如下插件的依赖

buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.3.0'classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:latest.release'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}复制代码

接着在你需要上传的 lib 的 module 的 build.gradle 的文件中增加如下配置:
这个是用来配置上传的路径和账号信息的

artifactory {contextUrl = MAVEN_LOCAL_PATHpublish {repository {// 需要构建的路径repoKey = 'gradle-release-local'username = 'admin'password = '这里是密码'}defaults {// Tell the Artifactory Plugin which artifacts should be published to Artifactory.publications('aar')publishArtifacts = true// Properties to be attached to the published artifacts.properties = ['qa.level': 'basic', 'dev.team': 'core']// Publish generated POM files to Artifactory (true by default)// POM 文件publishPom = true}}
}复制代码

还有是配置上传的版本信息

def MAVEN_LOCAL_PATH ='http://192.168.111.11:8081/artifactory'
def ARTIFACT_ID = 'testsdk'
def VERSION_NAME = '3.0.0'
def GROUP_ID = 'cn.test.test'publishing {publications {aar(MavenPublication) {groupId GROUP_IDversion = VERSION_NAMEartifactId ARTIFACT_ID// Tell maven to prepare the generated "*.aar" file for publishingartifact("$buildDir/outputs/aar/${project.getName()}-release.aar")}}
}复制代码

最主要的是配置这两个 task。
然后开始执行上传!
步骤如下

  • clean 初始化
  • assembleRelease 构建 aar
  • artifactoryPublish 发布到 Artifactory 中

问题
这里第一次 publish 的时候上传失败,遇到问题,说找不到 POM 文件。
我去对应的路径里面找,确实没有生成。
一开始我的操作是把上面的 artifactory 中的 defaults 的 publishPom 设置为 false 。这样能顺利 build 的,但是没有上传 POM 文件。

导致了后面在 demo 中通过 compile 'cn.test.test:testsdk:3.0.0' 这样的形式找不到包,必须通过明确的 aar 后缀的 complie 方式才能找到包,估计 POM 文件是起到类型配置的作用的。

正确的操作应该执行一下 artifactoryPublish 下面的 generatePomFileForAarPublication 就会生成了。
? 呵呵 没想到吧
反正我是翻了大量的资料,最后自己发现的。。。看的懂英文多重要!

上传上去需要配置的三个参数

  • ARTIFACT_ID 你的库名字
  • GROUP_ID 库的包名【可以这么理解】
  • VERSION_NAME 库的版本号

Lib 的集成

当上一步的包上传完成之后,在你的本地通过下面两个配置就可以测试了。
首先在 Demo 的项目 gradle 增加 maven 库的地址,记得和你上面的对应。
大概是这样

allprojects {repositories {jcenter()maven { url "http://192.168.111.11:8081/artifactory/gradle-release-local" }}
}复制代码

在 Demo 的 app 的 gradle dependencies 加上

compile 'cn.test.test:testsdk:3.0.0'复制代码

sync 一下你的 gradle 文件,需要的插件就下下来了~

注意这个 compile 的格式,是根据这个规则生成的。

GROUP_ID:ARTIFACT_ID:VERSION_NAME复制代码

公网映射

上面的流程,你已经可以在你的本地,在连接上服务器之后,可以愉快的进行构建的,可是目标是为了服务 CP,CP 可不在内网环境。
我们希望的最终目标是他们能配置下面的 repo 地址,就能够下载到需要的依赖包。

 maven { url "http://repo.test.com/gradle/" }复制代码

这边有两部分操作

  • Nginx 做端口转发80到8081
  • 联系运维做外网的域名映射

之前一直对 Nginx 是个什么东西半知半解。
比如我们访问了一个 tan 90 的网址,看到这个界面

下面一行小字 nginx 。我所理解的 Nginx 应该是客户端和服务端中间的一层代理,他可以控制 a1 事件到 b 服务器处理,a2 事件到 c 服务器处理。请教了后台的同事,nginx 还有很多作用,如负载均衡等等。

所以我们的流程如下

  • 1 repo.test.com/gradle/

  • 2 映射到我们的目标服务器

  • 3 nginx 进行端口的跳转 80 交给 http://192.168.111.11:8081/artifactory/gradle-release-local

配置 Nginx

可以参考这篇文章相当的详细
www.nginx.cn/install

需要以下环境

  • gcc g++ 用来编译
  • gzip 模块需要 zlib 库 ( 下载: www.zlib.net/ )
  • rewrite 模块需要 pcre 库 ( 下载: www.pcre.org/ )
  • ssl 功能需要 openssl 库 ( 下载: www.openssl.org/ )

对应的最新包地址如下,都可以通过 wget 命令下载:

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
wget http://zlib.net/zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz复制代码

下完之后就是解压,tar,cd 进去,./config,make,make install 的操作了。
把三个都执行完之后,开始安装 Nginx 。

最新地址

wget http://nginx.org/download/nginx-1.12.0.tar.gz复制代码

这里要设置一下 configure 的相关参数,设置为上面的几个包。
默认都是下载到一个路径下面,解压安装

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid  --with-http_ssl_module --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=/usr/local/src/openssl-1.0.2l复制代码

启动 Nginx

通过 /usr/local/nginx/sbin/nginx

发现报错了:
error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
经网上查询,这是linux的通病
下面这样可以解决

[root@localhost nginx]# sbin/nginx
sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
[root@localhost nginx]# error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
[root@localhost nginx]# whereis libpcre.so.1
libpcre.so: /lib64/libpcre.so.0 /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.1
[root@localhost nginx]# ln -s /usr/local/lib/libpcre.so.1 /lib64
[root@localhost nginx]# sbin/nginx复制代码

先找到libpcre.so.1所在位置,然后做个软链接就可以了。

再次启动!
直接访问你的 ip 地址如果是这个界面就是成功了。

端口转发

下面就可以,配置 nginx 进行端口的跳转 80 交给 http://192.168.111.11:8081/artifactory/gradle-release-local。
修改 nginx 的 nginx.conf 文件。
配置如下

  server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}//通过这里加了代理的跳转location /gradle/{proxy_pass  http://192.168.111.11:8081/artifactory/gradle-release-local/;}}复制代码

这里用到了重启 nginx 的指令

./nginx -s reload复制代码

通过上面的配置就能实现跳转功能。
测试的方式就是访问
http://192.168.111.11/gradle/
看看是不是和之前是一样的路径,成功就是说明转发成功了。

映射

接下来就是联系运维帮你做一下外网的映射。就可以通过
repo.test.com/gradle/
来访问你的 maven 库了。

总结

通过这篇文章,基本可以从零服务端基础完整的搭建起一个 maven 仓库了。如果只是内网或者本地仓库的话,就不用 nginx 这部分操作了。

从零开始通过 Artifactory 搭建公网的 maven 仓库相关推荐

  1. 使用nexus搭建局域网私服Maven仓库(Windows版)

    认识Maven仓库 一 什么是Maven仓库 Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理.Maven仓库是专门用来存放jar ...

  2. Android 使用Nexus搭建本地私有Maven仓库

    一.前言 在Android开发中,经常有一种场景:需要将写好的某个lib用于各个不同的项目中. 做法有二:1.将lib直接导入到项目中,缺点:繁琐,一旦lib项目出现bug,所有导入的项目都要去修改. ...

  3. 利用码云gitee搭建个人maven仓库

    缘起 之前看到使用用了github来做maven仓库的教程,但国内github的速度不给力,个人偏向于使用码云gitee平台,便使用码云搭建了一个maven仓库,记录了下搭建过程. 简单来说,共有三步 ...

  4. 常用 Maven 仓库地址

    在使用 Nexus 搭建自己的 Maven 仓库时,我们需要为一些公共的 Maven 仓库做镜像,这就需要这些仓库的真实地址了,下面是这些仓库的地址: 仓库名称 仓库地址 gradle 引用方式 jc ...

  5. 最新jfrog artifactory搭建Android本地仓库教程

    提高gradle编译速度 jfrog artifactory本地仓库搭建 前言 什么是本地仓库 jfrog本地仓库搭建 更改项目仓库地址 解决Received status code 401 from ...

  6. Artifactory搭建本地仓库

    Artifactory搭建本地仓库 关于Artifactory Artifactory是什么? 根据官方的解释: JFrog Artifactory 是目前全球唯一一个支持所有开发语言,任意维度的元数 ...

  7. 在内网中使用maven_搭建私有maven仓库并在项目中使用

    这是一篇写给女朋友看的教程...前方高能,注意避让~ 1.私有maven仓库的搭建 搭建环境为阿里云ESC服务器,CentOS.确保服务器已经安装Jdk.然后我要手把手教你安装和启动nexus. St ...

  8. Nexus【环境搭建 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)

    1. 为什么要搭建私有Maven仓库   废话少说,只说主要原因,我现在参与的项目各个模块都是以微服务形式进行部署的,包括权限验证模块,我之前参与过一个项目,使用的是自己封装的权限验证setter依赖 ...

  9. 用Artifactory管理内部Maven仓库

    http://forearrow.iteye.com/blog/171385 1. 介绍 Maven是Java开发者中流行的构建工具,Maven的好处之一是可以帮助减少构建应用程序时所依赖的软件构件的 ...

最新文章

  1. C#语言与面向对象技术(2)
  2. java mysql 查询结果_JAVA中显示MYSQL查询结果
  3. 技术性图文还原那些腿长得能改变地球引力场的TB奇女子
  4. php 信号量 关闭,PHP信号量基本用法实例详解
  5. URAL 1009. K-based Numbers
  6. QT的QBufferDataGenerator类的使用
  7. 算法训练 最小乘积(基本型) (蓝桥杯水题)
  8. GNU make manual 翻译(四十三)
  9. SQL Server常用函数 -- 更新中
  10. Maven史上最全总结
  11. 诊所系统php,诊所管理系统
  12. Java数据库连接-JDBC
  13. BMFont制作字体图集
  14. mysql key语句_mysql建表语句key的含义
  15. 模拟实现死亡之Ping(Ping of death)
  16. 计算机移动硬盘无法访问,移动硬盘无法访问参数不正确的解决方法
  17. excel减法函数_Excel办公实操,提取多个条件的数据,办公必会技能
  18. Pixelmator Pro比肩Photoshop,专业的图像处理软件,是真的吗?
  19. dedecms教程:单页制作教程
  20. Windows 文件、目录操作编程 常用API

热门文章

  1. dz3.0数据库操作函数分析说明
  2. 函数的返回竟然能作为左值
  3. Nacos命名空间配置_每个人用各自自己的命名空间---SpringCloud Alibaba_若依微服务框架改造---工作笔记001
  4. MyCat分布式数据库集群架构工作笔记0007---Mycat登录
  5. C#串口通信工作笔记0001---嵌入式_串口通信_数据发送
  6. mybatis直接执行sql语句后续之一
  7. 面试题 数组长度可否赋值
  8. 玩 vmx ( by vision.ai ) 的过程记录
  9. C++的多态原理和实现
  10. PHP window2003服务和2008服务器上传个别文件访问报错