当前位置: 首页>编程语言>正文

maven lib maven library

如同以往的博客一样,先来说说为什么要写这篇博客吧。昨天做了一个android类库,由于有资源文件,所以打包成了aar,于是顺利将其集成到其它项目中,看起来没问题可以用,但是调试时候发现类库dependency中compile的第三方包没有正确的打包进来。这就悲催了,总不能在新的项目中将类库中需要的包compile进来啥,这不久太low了么,于是绞尽脑汁想解决办法,在网上找到不少资料说将类库发布到本地Maven仓库可以解决这个问题,尝试了下,的确可以解决(如果类库依赖了其它本地类库或者jar包则超出本博客的讨论范围,请看fat-aar相关资料)。

这篇文章的目的就是总结将Android类库发布到Maven仓库的实现方法,这里的Maven仓库有两种一种是本地的,一种是远程的(以Git为例)。

1、发布类库到本地Maven仓库

首先创建一个Android项目,然后创建一个我们需要的Android Library

maven lib maven library,maven lib maven library_android,第1张

这里创建一个名为androidLib的类库,在androidLib中添加对应的dependency依赖,这里添加个Gson和OkHttp3的依赖

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile  'com.squareup.okhttp3:logging-interceptor:3.4.1'
    compile 'com.google.code.gson:gson:2.8.2'
    compile 'com.android.support:appcompat-v7:26.+'
    testCompile 'junit:junit:4.12'
}

同时创建一个HelpUtil的辅助类(这个无所谓,主要是方便测试)

我们知道pom依赖是由三部分组成的比如下面的okhttp3的依赖,主要就是需要groupId、artifactId以及version。

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>logging-interceptor</artifactId>
  <version>3.4.1</version>
  <scope>compile</scope>
</dependency>

那么我们在将类库发布到Maven仓库就需要配置这三个信息,同时还需要配置仓库的位置,于是就有了下面三个关键步骤。

a、androidLib模块中新建gradle.properties文件,添加以下内容

#包信息
ARTIFACTID = androidLib
LIBRARY_VERSION = 1.0.0

#Mac下地址: file:///Users/<username>/my/local/repo
#Windows下地址: file:///<盘符>:/users/<username>/my/local/repo
LOCAL_REPO_URL=file:///C:/Users/caicai/my/local/repo

这里设置好artifactId、version以及仓库位置对应的几个变量信息。

b、项目根目录下的gradle.properties(没有则新建一个)中添加如下内容

#包信息
GROUP_ID = com.yoryky.mavendemo

# Licence信息
PROJ_LICENCE_NAME=The Apache Software License, Version 2.0
PROJ_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
PROJ_LICENCE_DEST=repo

这里设置好groupId对应的变量信息。

c、开始配置groupId、artifactId、version以及仓库位置

在androidLib对应的build.gradle中添加如下内容

apply plugin: 'maven'

uploadArchives{
    repositories.mavenDeployer{
        repository(url:LOCAL_REPO_URL)
        pom.groupId = GROUP_ID
        pom.artifactId = ARTIFACTID
        pom.version = LIBRARY_VERSION
    }
}

实际上a和b都是在配置变量,正真的设置就是c这个地方,也可以直接跳过a、b步骤,直接在c这里赋值就行了。

关于发布的配置配置就算结束,同步下gradle,然后可以看到gradle工具中有如下uploadArchives命令

maven lib maven library,maven lib maven library_android_02,第2张

双击触发该命令,然后到我们设置的对应repo中可以发现,发布成功。

maven lib maven library,maven lib maven library_github_03,第3张

这里可以看到生成了一个pom文件以及对应的androidLIb.aar包,再来看看pom文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yoryky.mavendemo</groupId>
  <artifactId>androidLib</artifactId>
  <version>1.0.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>logging-interceptor</artifactId>
      <version>3.4.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>appcompat-v7</artifactId>
      <version>26.+</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

发现我们需要的okhttp3和gson都在里面了,那么在其它项目中compile这个maven仓库中的androidLib就会根据这个pom文件找到androidLib包的依赖并将其自动添加到项目中。

2、使用本地仓库中的类库

第一小节讲了如何将类库发布到本地仓库,那么这一小节来说说使用的问题。既然都发布成功了使用就很简单了。

首先,在Project的build.gradle中添加对本地Maven仓库的引用

allprojects {
    repositories {
        jcenter()
        maven{
            url 'file:///C:/Users/caicai/my/local/repo/'
        }
    }
}

这里的url就对应我们上面设置的仓库路径。

然后在对应模块中添加对androidLib的依赖既可

maven lib maven library,maven lib maven library_maven lib_04,第4张

这里冒号分割的三个部分,就分别对应上面设置的groupId、artifactId以及version。

再看在项目中的使用

maven lib maven library,maven lib maven library_github_05,第5张

这确认了,androidLib依赖包被成功添加到了项目中。

3、说说远程Maven仓库

第一、二小节说了类库发布到本地Maven仓库以及使用,那么可以发布到远程Maven仓库么,答案是当然可以啊,这里就以github来说明吧。

先到github上创建一个new repository命名我MavenDemo,获取其git地址,然后将项目拉取到本地(名字也是MavenDemo),将repo下对应的类库拷贝到MavenDemo目录下,然后push到github。

本地的MavenDemo目录如下

maven lib maven library,maven lib maven library_android_06,第6张

提交到github后如下

maven lib maven library,maven lib maven library_android_07,第7张

那么远程Maven仓库就算是配置完成了(啥?这么简单)。

然后来看看使用吧

同样的我们需要在Project对应的build.gradle文件中去配置maven的url地址

赋值github项目路径

https://github.com/Yoryky/MavenDemo

将其变换为

https://raw.githubusercontent.com/Yoryky/MavenDemo/master

这其中将gitub.com变成了raw.githubusercontent.com然后在路径末尾添加了master。

这个raw.githubusercontent.com域名是github的素材库,我估计上传的maven仓库被放到这个域名下面,至于为什么不能直接用github项目路径作为地址,我也感到纳闷,有高手望指出。

有了路径后,还是配置好

allprojects {
    repositories {
        jcenter()
        maven{
            //远程maven路径
            url 'https://raw.githubusercontent.com/Yoryky/MavenDemo/master'
        }
    }
}

然后通过同样的方法compile依赖androidLib,测试后发现依赖成功。

到这里也就算是说清楚了Android类库发布及使用maven仓库的过程,这里给出一个测试Demo吧,MavenDemo。

4、参考文献

1、发布Android studio项目到本地Maven仓库

2、Android导出aar时嵌套引用的那些坑



https://www.xamrdz.com/lan/59x1967464.html

相关文章: