Gradle - build.gradle常用用法

最近一直在用Gradle来构建java应用,但是对于Gradle文件的写法不是很了解,一直都是跟度娘进行沟通。现在正好总结一下项目中用到的一些用法。

1. 引入插件包

一个项目中只放置一个build.gradle,build.gradle可以理解为一个Project框架,提供了对一个项目的基本配置。如果需要执行更过的task,比如对java进行编译、打包、部署、移动等操作,就需要引入相应的插件,或者自己写脚本。一般情况下,都是引入插件,然后再指定自己的task,这样减少很多的代码量,提高效率。

apply from: 'dependency.gradle'  // 加载本地插件

apply plugin: 'java'             // 加载java插件
apply plugin: 'eclipse'
apply plugin: 'base' 

加载了相应的插件后,在gradle task中就会显示插件提供的方法。

一般java项目都会加载 java , base 两个插件,我用的是eclipse,所以也将eclipse插件引进来了。

2. 设置工程 source 目录

// 设置sourceSets,只是project的属性
sourceSets {
    // 设置main source, 打包需要用到的资源
    main {
        java{
            srcDirs = ['src/main/java']
        }

        resources {
            srcDirs = ["src/main/resources", "config"]  // 我在这里多加了一个 config 包
        }
    }
    // 设置test source, 单元测试所需的资源
    test {

        java{
            srcDirs = ['src/test/java']
        }

        resources {
            srcDirs = ['src/test/resources']
        }
    }
}

一般java项目的默认source都跟上面相同,只是我多加了一个source包:config。

** 一定要记住哦,source路径 是不计算在 package包路径中的。

3. Project中常用的属性配置

version = 1.0                                 // 项目版本(全局的)
sourceCompatibility = 1.8                     // source使用的jdk版本
targetCompatibility = 1.8                     // 编译时使用的jdk版本
compileJava.options.encoding = 'UTF-8'        // 
compileTestJava.options.encoding = 'UTF-8'    //

4. 打jar包并复制

// 定义一个task, 继承自 jar task, 并依赖于 compileJava task
task assembleProject1Jar(type: Jar, dependsOn:[compileJava]) {
    onlyIf { !sourceSets.main.allSource.files.isEmpty() }
    // 打包后的jar基本名
    baseName 'project1'
    // version
    version ''
    
    // 选择编译后的class进行打包
    from ('build/classes/java/main/')
    include (['priv/allen/common/entity/*.class',
              'priv/allen/common/controller/*.class',
              'priv/allen/common/service/*.class',
              'priv/allen/common/dao/*.class']) 
    
    // 打包后的操作
    doLast {
    	copy {
    		from('build/libs') {
				include baseName + version + '.jar'
			}
            // 将打好的jar包复制到 workspace 中的另一个工程下
			into('../Project2/lib')
    	}
    }       		      
}

5. 在task执行后做一些操作

clean.doLast {
    if (file('target').exists()) {
        file('target').deleteDir()        
    } 
}

如果需要在 clean 操作后面添加一些额外的操作,可以采用 doLast 语法。

猜你喜欢

转载自blog.csdn.net/maihilton/article/details/81231619