一. 需求
比如说你创建了一个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来管理依赖:
- 在gradle中声明依赖:
compile 'groupId:artifactId:version'
- 编译时, gradle自动去maven仓库中下载依赖
用maven管理依赖, 那么你首先得有一个maven仓库, 然后还得提供library包, 因此下面就来说说如何把aar/jar发布到本地maven仓库 ......
二. 使用maven来管理依赖
- 在library module中应用maven插件:
apply plugin: 'maven'
- 定义库的group和version
group = 'com.alibaba.fastjson'
version = '2.0.5'
- 定义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'))
}
}
}
- 执行发布task:
在library module所在项目的根目录下, 执行下面的命令来发布library的包:
//发布某个library
./gradlew :some-module:clean :some-module:uploadArchives
或者执行下面的命令, 发布项目中的所有library库
./gradlew clean uploadArchives
- 发布之后, 你就可以方便的在其他项目中使用这写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 (●'◡'●)ノ♥