当前位置: 首页 > 知识库问答 >
问题:

Gradle Kotlin DSL:子项目和插件的问题

端木兴国
2023-03-14

等级 6.1.1

我一直在尝试使用Kotlin DSL转换我项目的gradle文件,但迄今为止失败了。我所有的项目都是Java的多项目构建。我在这里遵循了插件子项目示例

看起来是这样的:

plugins {
    idea
    eclipse
}

subprojects {
    apply(plugin = "java")

    dependencies {
       implementation("com.google.guava:guava:28.1-jre")
       //...
    }
}

子项目似乎不理解java插件,所有“实现”行都有一个未解析的引用。

共有1个答案

冯峻
2023-03-14

看这里留档https://docs.gradle.org/current/userguide/kotlin_dsl.html.

类型安全访问器不适用于由以下因素贡献的模型元素

    < li >通过apply(plugin = "id ")方法应用的插件 <李>...
 implementation()

是这样的类型安全访问器。非类型安全方式如下所示:

    apply(plugin = "java-library")
    dependencies {
        "api"("javax.measure:unit-api:1.0")
        "implementation"("tec.units:unit-ri:1.0.3")
    }

在groovy DSL中,所有方法都是动态解析的(不是类型安全的),所以在这里它并不重要。

这有助于理解build.gradle。kts文件不是纯kotlin文件。如果顶部有大量进口商品,它们看起来会更难看。因此,gradle运行时将“构建脚本”和“插件”块视为特殊块。“插件”被转换为导入语句。这不适用于apply()方法,后者在编译文件时运行。这也是为什么插件块不能在其他地方使用的原因,它是一个特殊的构造,只是假装是一个普通的代码块。这里再详细一点https://docs.gradle.org/current/dsl/org.gradle.plugin.use.PluginDependenciesSpec.html

仅仅从模块设计的角度来看,我通常建议多模块构建中的根模块与子模块的作用无关,即使有很多人像您的示例一样使用子项目块。让每个子模块的构建文件都像一个独立的gradle项目一样完整,因此读者不必阅读2个文件即可获得完整的画面。

有更好的显式方法可以在子项目之间共享配置

根文件中的< code>subprojects块最好用于添加额外的任务,如果项目的根IMO需要这些任务的话。不要注入插件或配置。

 类似资料:
  • 我有一个多项目分级配置,我想添加一个插件到所有子项目和根项目以及。阅读这里的文档似乎很容易: 如果您有一个多项目构建,您可能希望将插件应用于构建中的一些或所有子项目,而不是根项目或主项目。plugins{}块的默认行为是立即解析并应用插件。但是,您可以使用apply false语法告诉Gradle不要将插件应用到当前项目,然后在subprojects块中使用apply plugin:~plugin

  • 我看了看样品,然后跟着它走 (渐变版本为6.8.3) https://docs.gradle.org/6.8.3/samples/sample_building_java_applications_multi_project.html 我只是附加了插件io。Spring演示中的依赖关系管理。java常见约定。gradle文件。 然后运行gradle生成,出现以下错误。 错误:插件请求无效[id:“

  • 问题内容: 我正在一个较大的项目中,其中包含许多子项目,这些子项目都是用gradle构建的。通常所有项目都是java项目,因此在主build.gradle脚本中 为所有项目指定。 但是,我需要为项目的某个子树删除插件,或者从插件中明确排除项目。 这里是项目布局的粗略概述 Android / *不需要Java插件。实现此目标的最佳解决方案是什么?注意:我无法更改项目结构。 问题答案: 这应该可以解决

  • 我已经从https://eclipse.adobe.com/aem/dev-tools安装了AEM Eclipse插件(我下载了它作为存档,并在我的Eclipse作为本地存档使用)。 然后,我遇到了AEM向导在创建新项目时不显示的问题。找到了从中下载原型目录xml文件的变通方法https://repo.adobe.com/nexus/content/groups/public/archetype-

  • 可以通过nbPython plugin获得对NetBeans的Python和Jython支持。 从以下URL下载插件 - http://plugins.netbeans.org/plugin/56795 。 将下载的存档解压缩到某个文件夹中。 例如 - d:\nbplugin 。 要安装NetBeans插件,请按照下面给出的步骤操作。 Step 1 - 启动Netbeans IDE ,然后转到To

  • 我有以下多项目分级建设: 3个子项目分级文件中的每一个目前都非常简单: 以下是我想要达到的目标: 当我从父目录运行时,我希望所有三个子项目都使用0.1.5版本生成;因此,、和。但是,当前我的构建已经执行此操作... 如果客户端和共享JAR成功构建,我还希望将它们发布到我的私有Artifactory repo中。(我不希望发布服务器JAR)。 我的问题是:如何将这个片段添加到我的项目中,这样从父目录