从子项目中提取重复的插件到根 gradle 配置

Posted

技术标签:

【中文标题】从子项目中提取重复的插件到根 gradle 配置【英文标题】:Extract duplicates of plugins from subProjects to root gradle config 【发布时间】:2019-08-24 19:13:36 【问题描述】:

我有这个项目结构:

-root-project
 -settings.gradle
 -build.gradle
 -subProjectA(spring-boot)
  -build.gradle
 -subprojectB(spring-boot)
  -build.gradle
 -subprojectC(spring-boot)
  -build.gradle
 -commonProject(java library)
  -build.gradle

很简单我的root settings.gradle:

rootProject.name = 'root-project'
include 'subProjectA'
include 'subprojectB'
include 'subprojectC'
include 'commonProject'

这是我的根项目 build.gradle:

group = 'my.domain'
version = '0.0.1-SNAPSHOT'

ext 
    springBootVersion = '2.1.3.RELEASE'
    cxfVersion = '3.2.7'
    uuidGeneratorVersion = '3.1.5'
    commonLang3Version = '3.7'
    encacheVersion = '2.6.11'
    logstashVersion = '5.2'

在每个子项目中,我都有带有这些插件的build.gradle 文件:

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
    


apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'eclipse'

我在每个subModule 中都有重复的插件和spring-boot 依赖项,我想将它移动到一个通用(根)文件中。但我不明白我该怎么做。

【问题讨论】:

【参考方案1】:

在根 build.gradle 文件中,您可以使用如下所示的 subprojects 块应用常见插件或其他配置,如常见任务、sourceCompatibility 和 targetCompatibility、清单信息、测试配置等。

subprojects 
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'idea'
    apply plugin: 'java'
    apply plugin: 'eclipse'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    jar 
        manifest 
            attributes (
                'Built-By'       : System.properties['user.name'],
                'Build-Timestamp': new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date()),
                'Created-By'     : "Gradle $gradle.gradleVersion",
                'Build-Jdk'      : "$System.properties['java.version'] ($System.properties['java.vendor'] $System.properties['java.vm.version'])",
                'Build-OS'       : "$System.properties['os.name'] $System.properties['os.arch'] $System.properties['os.version']"
            )
        
    

   // Other Configs

【讨论】:

以上是关于从子项目中提取重复的插件到根 gradle 配置的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio gradle配置项 packagingOptions说明 Android打包so库重复问题

Android Studio gradle配置项 packagingOptions说明 Android打包so库重复问题

html Vue $将事件从子模板发送到根父级(Header to App)

Android Gradle 插件Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )

IDEA中Gradle插件的使用

IDEA中Gradle插件的使用