Gradle获取源码sourceSets

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle获取源码sourceSets相关的知识,希望对你有一定的参考价值。

参考技术A

在写gradle插件时可能会使用到源码文件,如作源码文件的版本对比,源码分析等,但源码如何来获取呢?一般gradle项目的源码默认都是在固定的位置,如project/app/src/main/java 。但源码的位置并非一定要在此,这只是一个 默认位置 ,在Gradle的配置文件build.gradle里是可以配置源码的位置的,下面可以看下在android和Java项目中是如何配置的。

Android源码配置是在android下面的sourceSets参数里进行配置。

Java项目sourceSets与Android项目的不同,它在最外层直接配置。

我们知道在gradle的配置文件中,每个名称都是一个Extension,每个Extension可以配置指定的参数列表。如android,是由AppPlugin通过project.getExtensions().create("android",AppExtension)来创建的,而AppExtension类的成员变量定义了gradle参数,如defaultConfig,productFlavors,buildTypes,signingConfigs等。然而事实并非如何,gradle里还有一种配置自定义参数的方式,即Convention。Convention方式中每个成员变量对应的是一个extension。其中Java项目中的sourceSets即是使用如何方式进行配置的。
下面看一下如何获取获取项目的源码。既然源码是通过自定义参数配置的,那么获取的时候通过拿到自定义的参数对象,获取其sourceSets字段即可。

android使用的是BaseExension对象配置的参数,所有通过Plugin获取到extension对象,取其中的sourceSets字段。

Java项目是通过Convention配置的,所以需要找到Convention对象,即JavaPluginConvention。通过此对象来获取Java项目的源码文件

注意Java项目创建了Jar任务用来打包,而Jar也有一个getSource方法,此方法获取的并不是源码文件,而是编译过的class文件。

Android Gradle 插件AndroidSourceSets 配置 ② ( BaseExtension#sourceSets 配置 | AndroidSourceSets 配置简介 )

文章目录

Android Plugin DSL Reference 参考文档 :





一、BaseExtension#sourceSets 配置



BaseExtension 文档 : android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html


1、源集配置


在 BaseExtension 中 使用

sourceSets  

脚本块 , 用于配置 源集 ;

NamedDomainObjectContainer<AndroidSourceSet> sourceSets

源集属性 , 源集是存放在 NamedDomainObjectContainer 容器中的 ;


AppExtension 继承了 BaseExtension , 因此在 " build.gradle # android " 模块中可以设置 sourceSets 源集列表 ;


2、sourceSets 脚本块原型


sourceSets 脚本块原型 :

sourceSets  
Configures source sets.

Note that the Android plugin uses its own implementation of source sets, AndroidSourceSet.

Delegates to:
NamedDomainObjectContainer<AndroidSourceSet> from sourceSets

3、NamedDomainObjectContainer sourceSets 属性原型


NamedDomainObjectContainer<AndroidSourceSet> sourceSets 属性原型 :

NamedDomainObjectContainer<AndroidSourceSet> sourceSets
All source sets. Note that the Android plugin uses its own implementation of source sets, AndroidSourceSet.




二、AndroidSourceSets 配置简介



AndroidSourceSets ( build.gradle#android#sourceSets 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html


AndroidSourceSets 配置中的各个属性如下 , 都是 Android 工程中常见的目录属性 ;

aidl	
The Android AIDL source directory for this source set.
此源集的Android AIDL源目录。

assets	
The Android Assets directory for this source set.
此源集的Android资产目录。

compileConfigurationName	
The name of the compile configuration for this source set.
此源集的编译配置的名称。

java	
The Java source which is to be compiled by the Java compiler into the class output directory.
Java编译器将编译到类输出目录中的Java源代码。

jni	
The Android JNI source directory for this source set.
此源集的Android JNI源目录。

jniLibs	
The Android JNI libs directory for this source set.
此源集的Android JNI libs目录。

manifest	
The Android Manifest file for this source set.
此源集的Android清单文件。

name	
The name of this source set.
此源集的名称。

packageConfigurationName	
The name of the runtime configuration for this source set.
此源集的运行时配置的名称。

providedConfigurationName	
The name of the compiled-only configuration for this source set.
此源集的仅编译配置的名称。

renderscript	
The Android RenderScript source directory for this source set.
此源集的Android RenderScript源目录。

res	
The Android Resources directory for this source set.
此源集的Android资源目录。

resources	
The Java resources which are to be copied into the javaResources output directory.
要复制到javaResources输出目录的Java资源。

以上是关于Gradle获取源码sourceSets的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch7.5.0源码编译

给她讲最爱的SpringBoot源码

Gradle 源码分析

Gradle 源码分析

Gradle 源码分析

Gradle 源码分析