Artifactory的搭建

介绍

Maven是Java开发者中流行的构建工具,Maven的好处之一是可以帮助减少构建应用程序时所依赖的软件构件的副本,Maven建议的方法是将所有软件构件存储于一个叫做repository的远程仓库中。

Maven会从ibiblio.org中的公用仓库中同步构件,这个公用仓库下载缓慢、不稳定,并且不包含一些构件的最新版本,而且不能上传团队私有的构件。通过设置内部Maven仓库,团队可以更有好地利用Maven仓库的优势并且克服使用ibiblio上的仓库时的缺点。

Maven仓库的目的

Maven仓库的目的是作为团队内所使用的所有软件构件的内部私有构件仓库,将Maven构件(jar和pom)存储到一个专门的Maven仓库比将它们存储到版本控制系统中更有优势,这是因为:

  • 构件(jar)是二进制文件,不属于版本控制系统,版本控制系统在处理文本文件方面比较好
  • 保持较小的版本控制数据库
  • Checkout、update和其他版本控制的操作可以更快

建立内部私有仓库的优势

  • 减少可能的版本冲突
  • 减少首次构建时需要的手动干涉
  • 中央仓库包含所有依赖的软件构件,引用单一的中央仓库比引用多个独立的本地库要好
  • 使用内部仓库做clean构建时会快些,因为Maven构件是从内部服务器而不是从因特网上的ibiblio服务器获取。

Maven构件库的类型

  • 本地仓库位于开发者的机器,由开发者维护,它从位于‘~home/.m2’ 目录的‘settings.xml’文件中定义的Maven仓库上同步,如果在pom.xml或setting.xml文件中没有设置内部私有远程仓库,那么开发者机器上的这个本地仓库就会从ibiblio.org 上的公用Maven仓库上同步。
  • 内部私有远程仓库这是我们将要设置的仓库,我们将改变maven 的pom.xml或settings.xml文件来使用这个库。
  • 外部公用远程仓库这是在ibiblio.org上的外部公用仓库,默认情况下,Maven从这个仓库上同步。

服务端配置

安装JDK 8

执行以下命令进行 jdk 8 的安装

sudo apt-get -y install oracle-java8-installer

这个过程是漫长的,等待一段时间之后会出现下边的情况 (/images/1498647620906.png)

点击Enter,然后继续 Alt text 选择YES,这样剩下的还是等待了

等装完之后执行java -version来查看是否安装成功

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

以上情况是成功安装了 JDK 8

###安装MySQL5.6 执行以下命令来安装 MySQL 5.6

sudo apt-get -y install mysql-server-5.6

在安装的过程中需要输入root的密码: Alt text 然后是验证密码的界面(此处省略)

安装 Artifactory

下载zip包,地址为https://www.jfrog.com/open-source/ 上传至服务器,然后解压 找到bin目录下的installService.sh文件,并执行,来安装Artifactory

安装完成之后,执行以下命令来启动服务

service artifactory start

使用可视化工具

在浏览器中打开http://ip.ip.ip.ip:8081/artifactory/webapp/#/home 输入账号:admin,密码:password 这样就可以进入后台管理工具

Android的使用

在管理工具中设置一个仓库,例如名字为:gradle-release-local

###gradle的配置 到你的主项目build.gradle中添加如下代码: 加载gradle插件 版本:org.jfrog.buildinfo:build-info-extractor-gradle:4+ 这里需要翻墙才能下载

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.3'
    classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4+'
}

然后在下面配置

allprojects {
    repositories {
        jcenter() //注:repository 1        mavenCentral()  //注:repository 2
        maven { url "https://jitpack.io" }
        //配置本地仓库
        maven { url "http://localhost:8081/artifactory/gradle-release-local/" }
    }
}

完整配置如下图: Alt text

配置上传的lib的项目

例如IDolPlayCore项目 Alt textIDolPlayCore项目中对build.gradle进行配置

apply plugin

apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'

setting pom

// maven本地地址
def MAVEN_LOCAL_PATH = 'http://localhost:8081/artifactory'
def ARTIFACT_ID = 'IDolPlayCore'
def VERSION_NAME = '0.1'
def GROUP_ID = 'cn.idolplay.core'
publishing {
    publications {
        // 表示要生成的文件为aar
        aar(MavenPublication) {
            // 上面 提到的三个要素
            groupId GROUP_ID
            // 上面 提到的三个要素
            version = VERSION_NAME
            // 上面 提到的三个要素
            artifactId ARTIFACT_ID
            // 知道上传包的位置
            // 这里表示告诉maven去哪里找你要发布的aar文件,其中project.getName()用于得到当前的module名字,一般情况下,你生成的aar就是对应的module名+后缀名+.aar
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
            pom.withXml {
                def dependencies = asNode().appendNode('dependencies')
                configurations.compile.allDependencies.each {
                    // 如果有compile fileTree(),group会为空,需要去除
                    if (it.group != null) {
                        def dependency = dependencies.appendNode('dependency')
                        dependency.appendNode('groupId', it.group)
                        dependency.appendNode('artifactId', it.name)
                        dependency.appendNode('version', it.version)
                    }
                }
            }
        }
    }
}

setting artifactorypublish

artifactory {
    // 表示要发布到的地址
    contextUrl = MAVEN_LOCAL_PATH
    publish {
        repository {
            // The Artifactory repository key to publish to
            // repoKey表示要发布到哪个分支下
            repoKey = 'gradle-release-local'
            //账户 这两个是用于访问artfactory的权限认证默认的账号密码为
            username = "admin"
            password = "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.xml文件发布到Artifactory中
            publishPom = true
        }
    }
}

这里是完整的 build.gradle

Alt text

注意 在这里上传的是 release.aar 包,所以执行的命令是release打包 artifactory/publish/repository/repokey 是你要上传的respository名称,当然可以新建

###打包发布到Artfactory 打开android studio右上角的gradle Alt text Alt text

执行步骤如下:

  1. assembleRelease : 打release 包
  2. generatePomFileForAarPublication : 生成 pom.xml 文件
  3. artifactoryPublish :上传

都成功后,你就可以去后台看到 Alt text

测试使用 app_gradle

所有需要使用到IDolPlayCore的地方需要删除原来的引用,变更成以下代码: Alt text

这个规则是: group_id : artifact_Id : version_name

  • group_id: cn.idolplay.core
  • artifact_Id: IDolPlayCore
  • version_name: 0.1
最后更新于 16th Oct 2017