搭建私有Jfrog artifactory仓库并上传Android Library

Posted yubo_725

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建私有Jfrog artifactory仓库并上传Android Library相关的知识,希望对你有一定的参考价值。

前言

最近在负责公司内部的android IM SDK开发,由于需要提供SDK给其他部门的项目使用,故打算将写好的IM SDK上传到Jfrog artifactory仓库,下面记录Jfrog的安装以及上传Android Library到该仓库的步骤。

安装Jfrog

关于Jfrog是个啥,这里不做过多的记录,可以理解为它是一个类似maven或jcenter的仓库,可以在其中存放各种类型的文件,是一个强大的通用包管理平台,国内可以直接通过这个地址访问:https://www.jfrogchina.com/查看更多信息。

我是在Ubuntu上使用docker安装的该系统,如果还没有安装docker,可以先搜索安装,下面是在docker下安装Jfrog的步骤:

拉取Jfrog镜像

docker pull docker.bintray.io/jfrog/artifactory-oss

使用上面的命令可以拉取Jfrog的docker镜像

启动Jfrog服务

docker run --name jfrog-oss -d \\
-p 8081:8081 -p 8082:8082 \\
-v /data01/jfrog_dir/var/:/var \\
docker.bintray.io/jfrog/artifactory-oss

使用上面的命令可以启动Jfrog服务,如果提示端口被占用,请自行更换端口

访问Jfrog控制台

上面一步完成后,如果没有任何错误,即可通过http://localhost:8082/artifactory在浏览器中访问Jfrog控制台。
注意上一步之行完毕后,可能需要等待一会儿才能在浏览器中通过前面的地址访问到Jfrog,如果你访问这个地址提示404或者一时无法打开,请稍等一会儿再试

这个系统的默认账号密码是admin / password,登录后最好修改默认密码。

配置Jfrog

安装完毕后,我们需要配置Jfrog,由于我们主要用Jfrog来存放Android库,故直接在后台创建一个maven仓库即可,如下图所示:


这里我直接创建了一个名为android-local的仓库。

配置Android项目

要将Android Library以aar包的形式上传到Jfrog上,需要给Android项目做一些配置,主要是如下几点:

  1. 在Android项目根目录下的build.gradle中添加如下插件配置:
buildscript 
    repositories 
        google()
        jcenter()
        mavenCentral()
    
    dependencies 
        classpath("com.android.tools.build:gradle:4.2.2")
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        // 添加下面一行
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.15.2"
    

  1. 在需要上传的Android Module目录下的build.gradle文件中添加如下配置
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'

// jfrog地址,配置为上一步中在浏览器中访问的地址即可
def MAVEN_ARTIFACTORY_URL = "http://192.168.1.2:8082/artifactory"
// group_id,自行配置即可
def GROUP_ID = "com.test.mylib"
// artifact_id,自行配置即可
def ARTIFACT_ID = "sdk"
// 上传到Jfrog仓库的lib的版本号,自行配置即可
def VERSION_NAME = "1.0.3"

publishing 
    publications 
        aar(MavenPublication) 
            groupId = GROUP_ID
            artifactId = ARTIFACT_ID
            version = VERSION_NAME

            artifact("$buildDir/outputs/aar/$project.getName()-release.aar")

            pom.withXml 
                def dependencies = asNode().appendNode("dependencies")
                configurations.implementation.allDependencies.each 
                    def dependency = dependencies.appendNode("dependency")
                    println("groupId == $it.group, artifactId == $it.name, version == $it.version")
                    dependency.appendNode("groupId", it.group)
                    dependency.appendNode("artifactId", it.name)
                    dependency.appendNode("version", it.version)
                
            
        
    


// 自定义task,在上传前执行clean和assembleRelease命令生成aar包
task beforePublish 
    dependsOn("clean")
    finalizedBy("assembleRelease")


artifactoryPublish 
	// 依赖上面的自定义task
    dependsOn("beforePublish")
    contextUrl = MAVEN_ARTIFACTORY_URL
    publications(publishing.publications.aar)
    // 下面的配置根据你自己的Jfrog配置来
    clientConfig.publisher.repoKey = "android-local"
    clientConfig.publisher.username = "admin"
    clientConfig.publisher.password = "password"


  1. 执行命令上传aar包到Jfrog

这一步有两种方式执行,一种是直接在Android Studio中,通过双击Gradle视图中的菜单完成,如下所示:

另一种是直接在命令行下执行./gradlew im:artifactoryPublish

我这里Android Library的名字是im,你们上传时需要自行更改为你们的lib名称。

查看上传后的文件

如果上面的上传没有任何问题,可以在Jfrog后台看到上传的文件,如下图所示:

这里我上传了三个不同的版本,每个文件夹下都是一个aar文件和一个pom文件,其中pom文件记录了这个aar文件中依赖的一些其他库的名称和版本信息。

在其他项目中依赖Jfrog中的库

我们将代码打包成aar文件并上传到Jfrog的目的,就是为了让别的项目更方便的依赖,要在别的Android项目中依赖Jfrog上的库,方法也很简单,主要步骤如下:

  1. 在Android项目的根目录下的build.gradle文件中加入如下配置
allprojects 
    repositories 
    	...
    	// 添加下面的配置
    	maven 
    		// 注意这里的地址为Jfrog访问地址+仓库名称(我这里的android-local为上面创建的maven仓库名称)
    		url 'http://192.168.1.2:8082/artifactory/android-local/'
    	
    

  1. 在需要引用上面上传的lib的module目录下的build.gradle中,添加依赖项
implementation 'com.test.mylib:sdk:11.0.0'

注意这里的依赖项为你上传时配置的几项拼起来的:GROUP_ID:ARTIFACT_ID:VERSION_NAME

然后Sync项目,就可以正确依赖Jfrog仓库里的lib了~

参考

https://jfrog.com/knowledge-base/how-to-publish-build-info-and-artifacts-from-a-gradle-android-project-into-artifactory/

以上是关于搭建私有Jfrog artifactory仓库并上传Android Library的主要内容,如果未能解决你的问题,请参考以下文章

搭建私有Jfrog artifactory仓库并上传Android Library

搭建私有Jfrog artifactory仓库并上传Android Library

手把手教你搭建 jfrog artifactory本地仓库

手把手教你搭建 jfrog artifactory本地仓库

Maven仓库从Nexus迁移到JFrog Artifactory踩坑

Artifactory的搭建与使用简介