cas*_*eif 6 gradle git-submodules
我试图将 Git 子模块作为子项目包含在我的主要 Gradle 项目中,但 Gradle 拒绝验证构建脚本,理由是我的项目和子项目都需要相同的插件 ( "Plugin request for plugin already on the classpath must not include a version")。
从主项目中删除插件不是一个选项,因为插件定义的任务将不再可用于主构建脚本。也不会从主构建脚本中省略插件版本,因为这是 Gradle 看到的插件声明的第一个实例(而错误是在子项目的声明中抛出的)。
通常我会让我的项目修补这种不兼容性,但由于构建脚本没有验证,这显然不是一个选项。鉴于我实际上无法控制子项目的构建脚本,可以做些什么来解决冲突?
我有一个类似的问题,我想包含一个也应该能够自己构建的模块。更准确地说,我想包含的模块也声明com.github.johnrengelman.shadow用于生成可运行的 JAR。这导致两个build.gradle文件使用版本号声明此插件。
解决方案是使用Composite Build。这导致模块的构建完全独立,能够声明任何版本的插件。
你所要做的就是添加includeBuild "<pathToSubmodule>"你的根settings.gradle:
includeBuild "../submodule"
Run Code Online (Sandbox Code Playgroud)
然后,您可以在顶层build.gradle 中将子模块定义为普通依赖项:
dependencies {
implementation 'com.mycompany:submodule:1.0-SNAPSHOT'
}
Run Code Online (Sandbox Code Playgroud)
不过,补丁可能仍然是可以想象的,如本线程中所述(因为插件的官方 Gradle 文档未涵盖它):
\n\n目前,我能想到2 \xe2\x80\x9cworkarounds\xe2\x80\x9d:
\n\n\n\n\n1/ 在您的子项目中,不要使用块应用
\n\nplugins{},而是使用旧插件应用程序有条件地应用插件。
\n这是我使用的方法:Run Code Online (Sandbox Code Playgroud)\nbuildscript {\n repositories {\n maven {\n url "https://plugins.gradle.org/m2/"\n }\n }\n dependencies {\n classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.31"\n }\n}\n\ndef kotlinPluginId = \'org.jetbrains.kotlin.multiplatform\'\nfinal hasPlugin = project.getPlugins().hasPlugin(kotlinPluginId);\nif (hasPlugin) {\n final Plugin plugin = project.getPlugins().getPlugin(kotlinPluginId)\n println \'Plugin already applied - version \' + plugin.properties[\'kotlinPluginVersion\']\n} else {\n apply plugin: "org.jetbrains.kotlin.multiplatform"\n}\n
或者:
\n\n\n\n2/ 为独立项目创建一个虚拟根项目,并为子项目使用plugins{} 块。在这种情况下,子项目不会\xe2\x80\x99t有任何逻辑来应用插件。
\n
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |