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

2021-02-08  本文已影响0人  kevin丶xie

编写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有那么多内置的插件,那怎么快速的上手使用每个插件呢?

以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);
}

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

上一篇下一篇

猜你喜欢

热点阅读