在gradle中,如何为插件版本使用变量?

在gradle中,如何为插件版本使用变量?,gradle,netflix-nebula-plugins,Gradle,Netflix Nebula Plugins,我的一个构建脚本导入了nebula插件: plugins { id 'nebula.ospackage' version '3.5.0' } 我一直在将我的所有版本信息移动到一个单独的文件中,所有项目都可以访问该文件,我想知道转换为以下内容的正确语法是什么: plugins { id 'nebula.ospackage' version "$versions.nebula_gradle_ospackage_plugin" } 当我尝试使用“gradle clean build”运行上

我的一个构建脚本导入了nebula插件:

plugins {
  id 'nebula.ospackage' version '3.5.0'
}
我一直在将我的所有版本信息移动到一个单独的文件中,所有项目都可以访问该文件,我想知道转换为以下内容的正确语法是什么:

plugins {
  id 'nebula.ospackage' version "$versions.nebula_gradle_ospackage_plugin"
}
当我尝试使用“gradle clean build”运行上述命令时,我得到以下错误:

生成文件“build.gradle”:2:参数列表必须正好是1个文本 非空字符串

看 有关插件{}块的信息

@第2行,第33列。 id“nebula.ospackage”版本“$versions.nebula\u gradle\u ospackage\u插件”


链接的文章展示了如何使用“buildscript”块,它可以工作,但似乎必须有一种方法可以在一行中工作?

您不能在此处使用变量:

其中«插件版本»和«插件id»必须是常量、文字, 串。不允许有其他声明;他们的存在将引起一场灾难 编译错误


您不能在此处使用变量:

其中«插件版本»和«插件id»必须是常量、文字, 串。不允许有其他声明;他们的存在将引起一场灾难 编译错误

这是一篇老文章,但仍然开放,我发现这篇文章在寻找解决办法

看起来你已经意识到了这一点,实际上也意识到了,但我认为这可能会帮助其他人像我一样找到这篇文章。以下解决方法基于,并为我解决了问题:

buildscript{
分机{
springBootVersion='2.0.4.RELEASE'
}
存储库{
jcenter()
}
依赖关系{
类路径(“org.springframework.boot:spring-boot-gradle插件:${springBootVersion}”)
}
}
插件{
id‘java’
//和其他插件
id“io.spring.dependency management”版本“1.0.6.RELEASE”
}
//但具有可变版本的应用程序采用的是旧方法:
应用插件:“org.springframework.boot”
//我们也可以在依赖项中使用变量:
依赖关系{
编译组:'org.springframework.boot',名称:'springbootstarterweb',版本:springBootVersion
// ...
}
这是一篇旧文章,但仍然开放,我发现这篇文章正在寻找解决方法

看起来你已经意识到了这一点,实际上也意识到了,但我认为这可能会帮助其他人像我一样找到这篇文章。以下解决方法基于,并为我解决了问题:

buildscript{
分机{
springBootVersion='2.0.4.RELEASE'
}
存储库{
jcenter()
}
依赖关系{
类路径(“org.springframework.boot:spring-boot-gradle插件:${springBootVersion}”)
}
}
插件{
id‘java’
//和其他插件
id“io.spring.dependency management”版本“1.0.6.RELEASE”
}
//但具有可变版本的应用程序采用的是旧方法:
应用插件:“org.springframework.boot”
//我们也可以在依赖项中使用变量:
依赖关系{
编译组:'org.springframework.boot',名称:'springbootstarterweb',版本:springBootVersion
// ...
}

从Gradle 5.6开始,您可以在
Gradle.properties
文件中声明插件版本,并在
插件
块中引用这些属性

例如,
gradle.properties
文件:

springBootVersion=2.2.0.RELEASE
build.gradle中的
插件

plugins {
    id "org.springframework.boot" version "${springBootVersion}"
}
请参阅:

另见:


  • 从Gradle 5.6开始,您可以在
    Gradle.properties
    文件中声明插件版本,并在
    plugins
    块中引用这些属性

    例如,
    gradle.properties
    文件:

    springBootVersion=2.2.0.RELEASE
    
    build.gradle中的
    插件

    plugins {
        id "org.springframework.boot" version "${springBootVersion}"
    }
    
    请参阅:

    另见:

  • 总结
  • 插件
    块中省略版本
  • 而是在
    buildscript.dependencies
    块中移动/指定版本
  • 在该块中使用
    const
    变量
  • 简言之,
    plugin
    块需要字符串文本或属性,而
    dependency
    块允许变量。最初的问题要求在“一行”中完成这项工作,使用这种方法,您的插件块更短,所有模块的所有依赖项都位于一个位置。根据你的目标,这可能比在“一行”中完成所有事情要好

    完整示例 对于Android,我可以通过从
    插件
    块中省略该版本,然后在buildscript依赖项中将其指定为
    const
    来实现这一点。该块允许变量,而插件块只允许字符串文本。从这里开始,我在
    buildSrc
    中使用一个对象,因为它提供了最大的灵活性,同时将所有模块的所有依赖关系信息保存在一个文件中。因此,我的设置如下所示:

    ├── project/
    │   ├── build.gradle
    |   └── app/
    |       └── build.gradle
    |   └── buildSrc/
    |       └── build.gradle.kts
    |       └── src/main/java/com/example/package/Deps.kt
    
    从这里开始,为了在一个地方将任何插件版本指定为变量,
    app/build.gradle
    文件省略了该版本(以kotlin为例,但同样的方法适用于任何插件):

    app/build.gradle
    插件{
    id'kotlin android'//此处省略version属性,但在buildscript依赖项中提供它
    ...
    }
    ...
    依赖关系{
    ...
    //匕首
    实现Deps.Dagger.ANDROID_支持
    kapt Deps.Dagger.ANDROID_处理器
    卡普特副警长匕首
    }
    
    然后buildscript依赖项部分(通常在父
    build.gradle
    文件中,但也可以在同一文件中)使用变量提供版本

    project/build.gradle
    import com.example.package.Deps//buildSrc文件夹中包含所有版本信息的对象
    构建脚本{
    依赖关系{
    类路径“org.jetbrains.kotlin:kotlin gradle插件:${Deps.kotlinVersion}”
    }
    }
    
    最后,所有版本信息都在buildSrc中通过一个对象进行管理