如何发布jar/aar到本地仓库

作者: 元亨利贞o | 来源:发表于2016-11-25 17:36 被阅读4988次
balabala.png

一. 需求
比如说你创建了一个library库, 另一些项目中需要用到这个library, 那么怎么依赖才比是最简洁的呢?

对于Android Studio来说

方案一: 你需要拷贝library到这些项目的根目录下, 然后用下面的方式来引用此library库:

dependencies { 
  ......
  compile project(':library')
}

方案二: 在settings.gradle里面配置这个library, 如下:

include ":library"
//指定library的具体目录
project(":library").projectDir=new File("../../../some-dir/some-project/library")

.


上面两种方案都比较麻烦, 也不太灵活, 下面是重点:

方案三: 使用maven来管理依赖:

  1. 在gradle中声明依赖: compile 'groupId:artifactId:version'
  2. 编译时, gradle自动去maven仓库中下载依赖

用maven管理依赖, 那么你首先得有一个maven仓库, 然后还得提供library包, 因此下面就来说说如何把aar/jar发布到本地maven仓库 ......

二. 使用maven来管理依赖

  1. 在library module中应用maven插件:
    apply plugin: 'maven'
  2. 定义库的group和version
group = 'com.alibaba.fastjson'
version = '2.0.5'
  1. 定义uploadArchives task (顺便定义目标maven仓库的地址), 如下:
uploadArchives {
      repositories {
          mavenDeployer {
              repository(url: uri('../repo')) //定义本地maven仓库的地址
          }
      }
}

tips: 上面三步可以合并起来, 即在library module的build.gradle文件的最后, 添加下面这段代码就可以了:

apply plugin: 'maven'
group = 'com.stone.jlib'
version = '0.8.2'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}
  1. 执行发布task:
    在library module所在项目的根目录下, 执行下面的命令来发布library的包:
//发布某个library 
./gradlew :some-module:clean :some-module:uploadArchives 
或者执行下面的命令, 发布项目中的所有library库
./gradlew clean uploadArchives
  1. 发布之后, 你就可以方便的在其他项目中使用这写library啦
    a. 定义依赖的library所在的仓库 (在module的build.gradle文件中定义)
repositories {
    maven {
         url '../repo'
    }
}

b. 声明依赖库

dependencies {  
        compile 'com.stone.jlib:jlib:0.8.2'
}

上面这样发布jar包, 没有将源码也打包. 那么如何将源码也打成jar包和class文件打的包一起发布呢??
这就要用到gradle内置的另一个plugin: 'maven-publish', java库项目只要在相应的module下的build.gradle文件最后加上下面的脚本语句即可 (具体参考jlibwithsource):

//在项目根目录下执行命令 `./gradlew :jlibwithsource:clean :jlibwithsource:publish`, 来发布当前jar包
//使用这个配置发布的包包括: 源码打成的jar包和class文件打成的jar包
apply plugin: "maven-publish"
//重新已有的task (用于打包源文件, 用于定义某个`publication`中的源文件包, 如下面的: `artifact sourceJar`)
task sourceJar(type: Jar) {
    from sourceSets.main.allJava
    classifier "sources" //定义一个标志 (生成的jar包后面加上sources, 如: jlib-2.2.11-sources.jar)
}

publishing {
    publications {
        maven(MavenPublication) {
            //打包源码和class
            from components.java    //发布java组件

            //定义源码task
            artifact sourceJar

            //定义包的坐标:
            groupId 'com.stone.jlibwithsource.jlib'
            artifactId 'jlib'
            version '2.2.11'
        }
    }


    //定义目标仓库 (包所存放的地方)
    repositories {
        //发布到自定义的目录
        maven {
            url '../repo' //本地仓库 (包存放在项目更目录下的repo目录)
        }

        //发布到本地maven仓库 (~/.m2/repository)
//        mavenLocal()
    }
}

更多详细内容, 请看此博客的源码, 欢迎fork或start (●'◡'●)ノ♥

相关文章

网友评论

本文标题:如何发布jar/aar到本地仓库

本文链接:https://www.haomeiwen.com/subject/yzqwpttx.html