我有一个多项目构建,而且我经常发现自己全面锁定了工件的版本。因此,在我的根项目中,我定义了如下内容:
project.extra.set("pkgVersions", mapOf(
"kotlin" to "1.2.0",
"jooq" to "3.10.2"
))
val pkgVersions : Map<String, String> by project.extra
plugins {
base
kotlin("jvm") version "1.2.0" apply false
}
虽然我可以在任何地方使用 pkgVersions
,包括其他子项目:
val pkgVersions by rootProject.extra
jooq {
version = pkgVersions["jooq"]
}
我无法在插件块内执行此操作:
plugins {
kotlin("jvm") version pkgVersions["kotlin"]
}
给我错误“在这种情况下,隐式接收器无法调用 pkgVersions。如果需要,请使用明确的”。我假设这是因为隐式接收器可能是文件的 JVM 印象?但相反,它使用的是PluginDependencySpec
。尝试使用 this@
自动完成只会显示this@plugin
。这只是我的一个长期猜测。但是,关于我应该做什么的任何指示?
此外,当我们在做的时候,有没有办法在gradle-kotlin-dsl
中创建全局类型,例如:
data class MyBuildType(..)
并在不使用buildSrc
的情况下在任何地方都可以使用它?使用buildSrc
非常简单,我不介意使用它,但只是想知道。
根据留档(参见约束语法小节)
插件版本和插件id必须是常量、文字、字符串
以下各段载有与你的问题有关的其他说明:
插件 {} 块也必须是构建脚本中的顶级语句。它不能嵌套在另一个构造中(例如 if 语句或 for 循环)。
只能在生成脚本中使用
插件{}块当前只能在项目的构建脚本中使用。它不能用于脚本插件和设置。gradle文件或init脚本。
Gradle的未来版本将取消这一限制。
所以现在不可能做到这一点。
有一个解决方法可以提取插件版本并在之后使用它,但我个人觉得它很难看,更喜欢使用显式版本。
显然,如果过去不可能的话,这最近已经成为可能。(几乎)来自文档:
gradle.properties
:
helloPluginVersion=1.0.0
settings.gradle.kts
:
kotlin prettyprint-override">pluginManagement {
val helloPluginVersion: String by settings
plugins {
id("com.example.hello") version helloPluginVersion
}
}
现在文档说< code>build.gradle.kts应该是空的,但是我的测试显示在< code>build.gradle.kts中仍然需要它:
plugins {
id("com.example.hello")
}
现在,版本由< code>settings.gradle.kts决定,因此由我们需要的< code>gradle.properties决定...
我有一个多模块的项目,有两个模块:war和ear模块。我正在尝试使用Maven发行版插件来管理发行版。 我的配置到目前为止... 父POM: war模块POM: ear模块POM: 正如您看到的表单日志,test-war-0.0.1-sources.jar正在上传两次。这是为什么?我怎样才能编辑我的配置,使它只上传一次?
我一直在尝试在我的Android应用程序中使用AppCompat组件,但出于某些原因,SetContentView方法不断抛出: Android意见。充气异常:二进制XML文件行#1:二进制XML文件行#1:错误充气类android。支持设计小装置。文本输入布局 异常的堆栈跟踪: 在系统中。运行时。例外服务。例外DispatchInfo。在/Users/builder/data/lanes/354
我是maven的新手,在使用程序集插件生成zip文件时花了大约3天的时间,引用了http://www.petrikainulainen.net/programming/tips-and-tricks/creating-a-runnable-binary-distribution-with-maven-assembly-plugin/My project is multi module,所以我还引用
在这种情况下,我必须读取某个属性文件,然后调用一个外部程序。 > 为了读取属性文件,我使用了属性Maven插件,在验证阶段使用 为了执行外部程序,我使用execmaven插件,调用goal 但是,如果我调用“mvn exec:exec”,则不会调用验证阶段,因此不会读取属性。 在我当前的场景中,我无法将exec:exec与任何特定的阶段联系起来(这是因为所有其他阶段都有非常具体的作业要处理,而我尝
这些模块是当前ansible附带的,但是也可能在以后被分开.额外模块主要被社区人员维护.非核心模块仍然是完全可用的,但是在发出和拉取请求时可能收到稍微低的响应速率 受欢迎的的 “extras” 模块将来可能会提升为核心模块 这些额外的模块托管在Github上的,`ansible-modules-extras <http://github.com/ansible/ansible-modules-ex
我有一个多项目分级配置,我想添加一个插件到所有子项目和根项目以及。阅读这里的文档似乎很容易: 如果您有一个多项目构建,您可能希望将插件应用于构建中的一些或所有子项目,而不是根项目或主项目。plugins{}块的默认行为是立即解析并应用插件。但是,您可以使用apply false语法告诉Gradle不要将插件应用到当前项目,然后在subprojects块中使用apply plugin:~plugin