在编写build.gradle
脚本的时候,依赖管理往往涉及到这几个方面:
- 从哪个仓库拿
Artifacts
- 这些
Artifacts
如何参与到compile
,runtime
,testCompile
阶段- 发布
Publish
到哪个仓库中,供其他人使用
基于以上理解,会有三个部分的脚本要编写:
repositories
dependencies
publish
但是,在这之前需要注意一件事情,拿到的这些Artifacts
需要怎样的编程语言支持。所以,Gradle plugin
需要引入到脚本中。
- apply plugin: ‘java’
- apply plugin: ‘groovy’
- apply plugin: ‘scala’
甚至,还需要考虑到有些特殊的结构或者文件被产生出来。比如:
- apply plugin: ‘web’
如何配置Gradle
的仓库repositories
呢?
从外部仓库引入
在build.gradle
脚本中加入(Maven):
repositories {
mavenCentral()
}
其中,mavenCentral()是个默认的仓库。它的地址是mavenCentral
或者(Bintray):
repositories {
jcentral()
}
其中,jcentral()是Bintray
的默认仓库。它的地址是jcentral
或者(Google):
repositories {
google()
}
其中,google()是Google
的默认仓库。它的地址是google
从本地仓库引入
如果本地有maven
仓库:
repositories {
mavenLocal()
}
这里的仓库路径,默认是在USER_HOME/.m2/repositories/
。如果,本地仓库的路径配置有变,那么应该从settings.xml
文件中的相关配置中找。
这里有个特殊的情况。如果有些Artifacts
既不在本地Maven
仓库,也不在远程仓库。可能在平级的目录中,比如:lib
或者libs
或者javalib
,那么flatDir
就必须被用到:
repositories {
flatDir {
dirs "lib", "libs", "javalib"
}
}
如果有个Artifact
既出现在flatDir
中,也出现在某个仓库中,那么Gradle
将会把仓库中的那个Artifact
提供给Application
使用。这是因为拥有meta-data
(pom.xml或者ivy.xml)决定了优先被供给。但是,假如本地仓库中的Artifact
也有meta-data
,那么本地仓库中的会替换远程仓库的。
从远程仓库引入
远程Maven仓库
repositories {
maven {
url "http://repo.mycompany.com/repo/maven2"
}
}
或者(Ivy):
repositories {
ivy {
url "http://repo.mycompany.com/repo"
}
}
或者(Google):
repositories {
maven {
url "https://maven.google.com"
// 或者
url "https://dl.google.com/dl/android/maven2/"
}
}
如果,上述仓库找不到,那么需要添加更多的仓库:
repositories {
maven {
url "https://repo1.maven.org/maven2"
artifactUrls "https://repo.mycompany.com/repo1"
artifactUrls "https://repo.mycompany.com/repo2"
}
}
如果,远程仓库有密码验证,那么需要添加验证部分:
repositories {
credential {
username "user"
password "password"
}
maven {
url "https://repo1.maven.org/maven2"
artifactUrls "https://repo.mycompany.com/repo1"
artifactUrls "https://repo.mycompany.com/repo2"
}
}