一、声明dependency
在build.gradle文件编辑以下代码:
Java代码
1. apply plugin: 'java'
2.
3. repositories {
4. mavenCentral()
5. }
6.
7. dependencies {
8. 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
9. 'junit', name: 'junit', version: '4.+'
10. }
以上代码表明:
(1) compile group:需要依赖Hibernate core 3.6.7.Final来编辑项目的源码,在编译时系统会自动将hibernate的依赖加入进来
(2)testCompile group:测试代码需要junit4以上的版本来编译
二、常用的依赖
(1)compile:编译生产代码的依赖环境,即src/main/下
runtime:生产代码运行时的依赖(包含编译生产代码时的依赖)
testCompile:编译测试代码的依赖环境,即src/test下
testRuntime:测试代码运行时的依赖(包含编译测试代码时的依赖)
三、依赖的配置
通常情况下有两种配置:
(1)使用 “group:name
:version
”形式来定义dependencies ,如
Java代码
1. dependencies {
2. class="hl-string">'org.hibernate'</span>, name: <span class="hl-string">'hibernate-core'</span>, version: <span class="hl-string">'3.6.7.Final'</span>
3. }
(2) 使用缩略形式,如:
Java代码
1. dependencies {
2. 'org.hibernate:hibernate-core:3.6.7.Final'
3. }
四、如何将相关jar包添加到classpath?
可以通过buildscript{}中添加依赖的方式,将相关jar包加入到classpath中,如:
Java代码
1. buildscript {
2. repositories {
3. mavenCentral()
4. }
5. dependencies {
6. 'commons-codec', name: 'commons-codec', version: '1.2'
7. }
8. }
就将commons-codec-1.2.jar加入到classpath中了
五、如何定义task 任务?
六、gradle plugin的本质?plugin是什么?可要用它来做什么?
gradle的plugin其实就是一个实现了Plugin接口的一个普通类,这个类必须要实现apply方法来执行相关的操作。如:在org.gradle.api.plugins包下,定义个JavaPlugin类
Java代码
1. public class JavaPlugin implements Plugin<Project> {
2. public static final String PROCESS_RESOURCES_TASK_NAME = "processResources";
3. public static final String CLASSES_TASK_NAME = "classes";
4. public static final String COMPILE_JAVA_TASK_NAME = "compileJava";
5. public static final String PROCESS_TEST_RESOURCES_TASK_NAME = "processTestResources";
6. public static final String TEST_CLASSES_TASK_NAME = "testClasses";
7. public static final String COMPILE_TEST_JAVA_TASK_NAME = "compileTestJava";
8. public static final String TEST_TASK_NAME = "test";
9. public static final String JAR_TASK_NAME = "jar";
10. public static final String JAVADOC_TASK_NAME = "javadoc";
11.
12. public static final String COMPILE_CONFIGURATION_NAME = "compile";
13. public static final String RUNTIME_CONFIGURATION_NAME = "runtime";
14. public static final String TEST_RUNTIME_CONFIGURATION_NAME = "testRuntime";
15. public static final String TEST_COMPILE_CONFIGURATION_NAME = "testCompile";
16.
17. public void apply(Project project) {
18. class);
19.
20. class);
21. "embeddedJavaProject", new EmbeddableJavaProjectImpl(javaConvention));
22.
23. configureSourceSets(javaConvention);
24. configureConfigurations(project);
25.
26. configureJavaDoc(javaConvention);
27. configureTest(project, javaConvention);
28. configureArchives(project, javaConvention);
29. configureBuild(project);
30. }
31. }
在定义类后需要对这个plugin类进行相关配置,只有配置之后才能被以“apply plugin:‘java’”形式使用。
首先需要在src\META-INF\目录下建立一个gradle-plugins文件夹,然后在该文件夹下建立一个名为“插件名.properties”文件,如java.properties,文件的内容为定义的plugin类的实现路径,具体内容如下:
Java代码
1. implementation-class=org.gradle.api.plugins.JavaPlugin
通过以上配置,我们就可以在build.gradle中明目张胆的使用:
Java代码
以后有机会将会详细来剖析 javaplugin这一gradle base plugin
plugin通常可以用来做以下事情:
- Add tasks to the project (e.g. compile, test)
- Pre-configure added tasks with useful defaults.
- Add dependency configurations to the project
- Add new properties and methods to existing type via extensions.
七、编写plugin的方法
通常有三种方法:
(1)在buildscript中编写plugin,这样编写的plugin只能用在当前项目中,不能被重用
rootProjectDir/buildSrc/src/main/groovy ”目录中用groovy编写plugin,
buildSrc目录下编写 build.gradle文件来对这个plugin进行说明
(3)独立的项目。将plugin写成一个独立的项目,然后发布成一个jar包供多个项目来使用。这个jar包中也可以包含多个task任务。
http://hougbin.iteye.com/blog/1459159
1、能够识别第一层的依赖jar包和传递依赖(transitive dependency)
2、jar包冲突解决
(1)使用gradle强制配置一级依赖
(2)强制配置传递依赖