gradle通关系列(二)-编写Gradle构建

编写Gradle构建

了解什么是Gradle,以及Gradle能够帮我们做什么之后,那该如何使用Gradle呢?

构建Java Application

如果我们现在需要构建一个java application,那我们该怎样做呢?当然是实现一个个构建java application的步骤了,首先编译一个个java源文件,然后创建清单文件配置主类,最后将所有的文件打成jar包。

这么麻烦的过程Gradle已经帮我们写好了,我们只需要使用Gradle内置的application插件就可以完成java application的打包了,上代码

plugins {
    //应用application插件
    application
}

//将javaSrc文件夹添加到java源文件路径,不配置的话默认为src/main/java
java {
    sourceSets {
        named("main") {
            java {
                srcDir("javaSrc")
            }
        }
    }
}

//配置加载的主类
application {
    mainClassName = "com.kevinxie.gradledemo.Main"
}

然后我们执行run的task就可以完成java application的编译及打包了。

构建C++ Application

之前我们了解到Gradle几乎可以构建任何类型的软件,那我现在想构建一个c++的application程序可以吗?当然可以,Gradle为我们内置了cpp application插件

//应用cpp-application插件
apply(plugin = "cpp-application")


configure<CppApplication>() {
    source {
        from("cppSrc/cpp")
    }
    privateHeaders {
        from("cppSrc/headers")
    }
}

Gradle内置插件

我们可以在gradle-api-xxx.jar中的META-INF中的gradle-plugins文件中去查找,每一个.properties文件都对应着一个plugin的实现类,这些文件名都是其对应插件的id,这些插件id都是以org.gradle开头的,所以我们使用内置插件的时候,可以省略插件id前面的org.gradle.,我们看看org.gradle.java.properties文件中的内容

implementation-class=org.gradle.api.plugins.JavaPlugin

java插件对应的实现类就是org.gradle.api.plugins.JavaPlugin类,当我们应用java插件时,就会调用JavaPlugin类中的apply方法,为我们完成一些通用构建任务的创建,以及拓展配置项。

Gradle内置插件的使用方式

Gradle有那么多内置的插件,那怎么快速的上手使用每个插件呢?

  • 看文档,去官网找对应插件的文档
  • 直接看Extension对应的源码,看哪些字段是可配置的

以application插件为例,我们可以查看Plugin源码,然后看插件拓展了哪些Extension,然后对应到Extension源码,就能够跟着源码来看有哪些配置,我们为什么可以直接配置application呢?

public void apply(final Project project) {
    //应用JavaPlugin
    project.getPluginManager().apply(JavaPlugin.class);
    ...
        //添加Extensions
    ApplicationPluginConvention pluginConvention = addExtensions(project);
    ...
}

private ApplicationPluginConvention addExtensions(Project project) {
    ApplicationPluginConvention pluginConvention = new DefaultApplicationPluginConvention(project);
    pluginConvention.setApplicationName(project.getName());
    project.getConvention().getPlugins().put("application", pluginConvention);
    //创建了application的拓展,对应到的拓展对象是JavaApplication
    project.getExtensions().create(JavaApplication.class, "application", DefaultJavaApplication.class, pluginConvention);
    return pluginConvention;
}

然后我们就可以阅读JavaApplication的源码来看我们可以配置哪些内容,所有set属性的都是我们可以配置的

public interface JavaApplication {
        //配置应用名称
    void setApplicationName(String applicationName);
        //配置主类名
    void setMainClassName(String mainClassName);
        //配置应用默认jvm参数
    void setApplicationDefaultJvmArgs(Iterable<String> applicationDefaultJvmArgs);
        //配置应用执行文件夹
    void setExecutableDir(String executableDir);
        //配置应用分布
    void setApplicationDistribution(CopySpec applicationDistribution);
}

当然,如果能够自定义插件,那这个就是基本操作了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容