8.1. What is dependency management?何谓?为何?



依赖管理大致有两块:首先Gradle需要找到你工程需要的东西,这些东西就是所谓的“依赖”。另外Gradle需要构建和上传你工程的产出,这就是所谓的发行。让我们来仔细看看它们:

dependency resolution).

transitive dependencies).

 Maven 或 Ivy 库,甚至在其他项目里使用。整个这个都是所谓的发行。


8.2. Declaring your dependencies依赖声明



我们看一下简单的依赖声明脚本:



Example 8.1. Declaring dependencies



build.gradle

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}



这是在搞毛?这段脚本说的是:1,工程在编译时需要Hibernate core 3.6.7.Final。这样Hibernate核心库和它的依赖库都会引入。2,测试的时候需要4.0以上版本的junit。另外就是这些包都要从 Maven central 库里查找。接下来咱们详细看下。


8.3. Dependency configurations依赖配置



configurations)

Java插件定义了一些标准配置,形成了插件本身的类路径库。下面列一下,你可以自己去这看:Table 23.5, “Java plugin - dependency configurations”.



compile

该依赖对于编译发行是必须的。


runtime

该依赖对于运行时是必须的,默认包含编译时依赖。


testCompile

该依赖对于编译测试是必须的,默认包含编译产品依赖和编译时依赖。


testRuntime

该依赖对于测试是必须的,默认包含编译、运行时、测试编译依赖。



定制化配置请看: Section 50.3, “Dependency configurations”


8.4. External dependencies外部依赖



external dependency)。这种依赖的对象不在工程内,甚至是在远程库里。

定义外部依赖需要如下加入到依赖配置:



Example 8.2. Definition of an external dependency



build.gradle



dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' }



外部依赖使用groupname 和version 属性。根据使用库的不同,group 和version可能是可选的。有一种快捷方式声明依赖:



Example 8.3. Shortcut definition of an external dependency



build.gradle



dependencies { compile 'org.hibernate:hibernate-core:3.6.7.Final' }



更多信息请看 Section 50.4, “How to declare your dependencies”.


8.5. Repositories库



repository)。一个库其实就是一大堆文件,不过是用groupname 和version组织好的。Gradle支持很多库,比如 Maven 和Ivy;还只存多种方式连接到库,比如本地系统或者 HTTP.

Gradle默认没定义库。你使用前需要至少定义一个,比如Maven central 库:



Example 8.4. Usage of Maven central repository



build.gradle



repositories { mavenCentral() }



或者远程Maven 库:



Example 8.5. Usage of a remote Maven repository



build.gradle



repositories { maven { url "http://repo.mycompany.com/maven2" } }



或者远程 Ivy 库:



Example 8.6. Usage of a remote Ivy directory



build.gradle



repositories { ivy { url "http://repo.mycompany.com/repo" } }



你可以自己建个库然后指定:



Example 8.7. Usage of a local Ivy directory



build.gradle



repositories { ivy { // URL can refer to a local directory url "../local-repo" } }



 Section 50.6, “Repositories”.


 


8.6. Publishing artifacts发布文件



publication artifacts),或干脆就叫“发件”(artifacts)(不会翻译,谁来纠正一下。。)

一般的,插件会做很多发件定义工作,所以我们不用干什么。不过需要告诉Gradle发件要发布到哪里。方法是把库附在 uploadArchives 任务里。比如我们要发布到远程Ivy库:



Example 8.8. Publishing to an Ivy repository



build.gradle

uploadArchives {
    repositories {
        ivy {
            credentials {
                username "username"
                password "pw"
            }
            url "http://repo.mycompany.com"
        }
    }
}


gradle uploadArchives, Gradle就会构建并上次你的Jar包,同时生成并上传一个ivy.xml 文件.

可以发布到Maven 库,语法有一点点不同。记住要使用Maven插件不然发布不过去。这样Gradle会生成并上传pom.xml文件。



Example 8.9. Publishing to a Maven repository



build.gradle

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
        }
    }
}



更多关于发布的信息请看 Chapter 51, Publishing artifacts.