0%

gradle-java插件

当我们使用java插件时,只需要在gradle文件中应用apply plugin :'java'一下 就好了,插件中有很多默认的配置,比如源代码位置在src/main/javasrc/test/java是单元测试用例的存放目录,src/main/resources是要打包的文件存放目录,比如配置文件和图片等。当然我们也可以改变java插件的默认配置,只需要在build.gradle中配置对应目录即可。

1
2
3
4
5
6
7
8
9
10
sourceSets{
main{
java{
srcDir 'src/java'
}
resources{
srcDir 'src/resources'
}
}
}

一般我们在IDEA中导入eclipse项目的时候可以暂时这样配置。

配置第三方依赖

要想使用三方依赖,首先要告诉Gradle从哪里找到这些依赖,一般我们从某个仓库中查找我们需要的jar包,所以我们应该配置使用什么类型的仓库:

1
2
3
repositories{
mavenCentral()
}

上面配置了一个Maven中央仓库,告诉Gradle可以在Maven中央仓库中查找我们依赖的jar,此外,我们也可以从jcenter、ivy、本地Maven库、自己搭建的Maven仓库查找:

1
2
3
4
5
6
repositories{
mavenCentral()
maven{
url "http://mymaven.com"
}
}

有了仓库,我们就可以使用我们的依赖了

1
2
3
dependencies{
compile group: 'com.squareup.okhttp3',name:'okhttp',version:'3.0.1'
}

或者

1
2
3
dependencies{
compile 'com.squareup.okhttp3:okhttp:3.0.1'
}

此外,java插件可以为不同的源集在编译时指定不同的依赖,比如main源集指定一个编译时依赖,vip源集可以指定另外一个不同的依赖:

1
2
3
4
dependencies{
mainCompile 'com.squareup.okhttp3:okhttp:3.0.1'
vipCompile 'com.squareup.okhttp3:okhttp:2.5.0'
}

依赖还可以是一个子项目(module):

1
2
3
dependencies{
compile project (':module')
}

依赖还可以是一个文件

1
2
3
dependencies{
compile file ('libs/xxx.jar')
}

当我们依赖的jar包较多时,可以这么写

1
2
3
dependencies{
compile fileTree(dir: 'libs', include: ['*.jar'])
}

源码集合(SourceSet)

SourceSet–源代码集合–源集,是Java插件来描述和管理源代码及其资源的一个抽象概念,是一个Java源代码文件和资源文件的合集。

有了源集,我们就能针对不同的业务和应用对我们的源码进行分组。Java插件在Project下为我们提供了一个sourceSet属性以及一个sourceSet{}闭包来访问和配置源集

属性名 类型 描述
name String 只读,比如main
output.classesDir File 该源集编译后的class文件目录
output.resourcesDir File 编译后生成的资源目录
compileClasspath FileCollection 编译该源集时所需要的classpath
java SourceDirectorySet 该源集的java源文件
java.srcDir Set 该源集的Java源文件所在目录
resources SourceDirectorySet 该源集的资源文件
resources.srcDir Set 该源集的资源文件所在目录

发布构件

Gradle构建的产物,我们称之为构件,一个构件可以是一个jar包,也可以是一个zip或者war包。想要发布构件,需要先定义发布什么样的构件。下面以发布一个Jar构件为例:

1
2
3
4
5
6
apply plugin:'java'
task publishJar(type:Jar)
version '1.0.0'
artifacts {
archives publishJar
}

发布的构件是通过artifacts{}闭包配置的,例子中我们通过一个Task来为我们发布提供构件,除了使用Task之外,还可以 直接发布一个文件对象:

1
2
3
4
def publishFile = file('build/buildile')
artifacts {
archives publishFile
}

配置好需要发布的构件后就可以发布,就是把你的构件上传到一个指定的目录、仓库等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apply plugin:'java'

task publishJar(type:Jar)

version '1.0.0'

artifacts {
archives publishJar
}

uploadArchives{
repositories {
flatDir{
name 'libs'
dirs "$projectDir/libs"
}
mavenLocal()
}
}

uploadArchives是一个UploadTask,用于上传发布我们的构件,上面的配置是发布到我们当前项目的libs目录和本地的Maven库(mavenLocal()),当你执行uploadArchives任务后,可以在用户目录下的.m2/repository文件夹下找到它。

假如我们要上传到自己公司搭建的Nexus私服为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
apply plugin:'java'
apply plugin:'maven'

task publishJar(type:Jar)

group 'com.company.projectName'
version '3.1415'

artifacts {
archives publishJar
}

def publishFile = file('build/buildile')
artifacts {
archives publishFile
}


uploadArchives{
repositories {
flatDir{
name 'libs'
dirs "$projectDir/libs"
}
mavenLocal()
mavenDeployer{
repository(url: "http://repo.mycompany.com/nexus/content/repositories/release"){
authentication(userName:'userName',password:'pwd')
}
snapshotRepository(url: "http://repo.mycompany.com/nexus/content/repositories/snapshot"){
authentication(userName:'userName',password:'pwd')
}
}
}
}

这里引用了一个maven插件,它对Maven的发布构件支持的非常好,可以直接配置release和snapshot库。


以上