当我们使用java插件时,只需要在gradle文件中应用apply plugin :'java'
一下 就好了,插件中有很多默认的配置,比如源代码位置在src/main/java
,src/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库。
以上