我有一个用Kotlin实现的Gradle插件,它是用gradle kotlin DSL构建脚本构建的。这工作正常。构建脚本如下,位于项目的 buildSrc 目录中:
plugins {
groovy
`kotlin-dsl`
}
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
testImplementation(gradleTestKit())
implementation(kotlin("gradle-plugin"))
implementation ("com.bmuschko:gradle-docker-plugin:6.1.3")
}
现在我想从Kotlin插件代码中调用同一个buildSrc源代码树中的一个现有Groovy类。这在Intellij中运行良好。
但是当使用gradle构建时,我得到了Groovy类的:unresolved引用类。查看构建,我发现首先执行了compileKotlin任务。当我取消注释失败的引用时,我看到groovyCompile生成了正确的二进制文件。
所以我试过这个:
tasks.compileKotlin {
dependsOn(tasks.compileGroovy)
}
当然这还不够好,但我试图让构建先编译Groovy代码。
我得到了以下错误:
Circular dependency between the following tasks:
:buildSrc:compileGroovy
\--- :buildSrc:compileJava
\--- :buildSrc:compileKotlin
\--- :buildSrc:compileGroovy (*)
因此,我尝试从compileGroovy中删除CompileJavaTask依赖项,但没有成功:
tasks.compileGroovy {
dependsOn.remove(tasks.compileJava)
}
一些如上的问题。基本上,我不清楚如何在gradle中删除预配置的任务依赖性
我真正需要的是与gradle groovy构建等效的东西:
compileGroovy.dependsOn = compileGroovy.taskDependencies.values - 'compileJava'
compileKotlin.dependsOn compileGroovy
compileKotlin.classpath += files(compileGroovy.destinationDir)
classes.dependsOn compileKotlin
这看起来像格雷德尔·科特林的Dsl吗?或者有没有更好的方法来解决这个Groovy/Kotlin代码依赖性问题?
版本信息:
------------------------------------------------------------
Gradle 5.2.1
------------------------------------------------------------
Build time: 2019-02-08 19:00:10 UTC
Revision: f02764e074c32ee8851a4e1877dd1fea8ffb7183
Kotlin DSL: 1.1.3
Kotlin: 1.3.20
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 1.8.0_232 (AdoptOpenJDK 25.232-b09)
OS: Mac OS X 10.15.3 x86_64
我认为这是等价的,尽管我认为它只是将Java排除在外,所以Groovy/Kotlin/Java buildSrc代码不会工作...:
tasks {
val compileJava = named("compileJava", JavaCompile::class).get()
val compileKotlin = named("compileKotlin", KotlinCompile::class).get()
val compileGroovy = named("compileGroovy", GroovyCompile::class).get()
val classes by getting
compileGroovy.dependsOn.remove("compileJava")
compileKotlin.setDependsOn(mutableListOf(compileGroovy))
compileKotlin.classpath += files(compileGroovy.destinationDir)
classes.setDependsOn(mutableListOf(compileKotlin))
}
这在Gradle 6.1中已经有了很大的改进
https://docs.gradle.org/6.1/release-notes.html#defining-groovy、-scala和java之间的编译顺序
我不确定上面的工程测试排序如果他们有意外的语言依赖排序
我想创建一个自动应用其他插件(外部插件)的插件。这需要在调用“apply plugin”之前设置插件的buildscript依赖项。然而,我似乎无法在插件中添加buildscript依赖项,或者我得到:您无法更改未处于未解析状态的配置! 有解决办法吗? 我的示例(非工作)代码:
本文向大家介绍gradle 依赖于另一个Gradle项目,包括了gradle 依赖于另一个Gradle项目的使用技巧和注意事项,需要的朋友参考一下 示例 对于多项目gradle构建,有时可能需要依赖构建中的另一个项目。为此,请在项目的依赖项中输入以下内容: ':OtherProject'从目录结构的根引用的项目gradle路径在哪里。 为了':OtherProject'在build.gradle文
免责声明:我是使用Ant Ivy的新手 我有以下eclipse配置: 项目A取决于项目B和项目C 项目B依赖于项目C 每个项目都有自己的ivy.xml文件。 ProjectA有一个生成。xml文件,如下所示: 因此,运行这个build.xml会导致错误,说ProjectC无法编译,因为它缺少一个*。应该由ivy:resolve命令解析的jar文件。 我的问题是: < li >如何创建一个build
首先,打开Android Studio并选择Create new Project,然后它会让你输入一个名字,你可以任意取一个名字,比如:Weather App。然后你需要输入公司域名。如果你不会真正发布这个app,这个字段就不是特别重要了,但是如果你有的话可以使用自己的域名。然后任意选择一个目录作为这个项目的保存地址。 下一步,它会让你选择最小的API版本。我们选择API 15,因为我们有一个库需
我正在使用maven 3.1.1,我有以下问题 我有一个主项目(pom.xml),它将被编译为WAR文件。它有两个模块。 模块1有以下内容(请注意工件的版本) 模块2有以下内容(请注意工件的版本) 因此,我的项目依赖于同一个库的两个版本。问题是库版本2与版本1不向后兼容。所以,我不能只包括版本2。 我正在考虑修改模块1以使用库版本2,但这需要大量时间。因此,我正在寻找一种方法来包含库的两个版本。
通常, 一个 Java 项目的依赖许多外部的 JAR 文件.为了在项目里引用这些 JAR 文件,你需要告诉 Gradle 去哪里找它们.在 Gradle 中,JAR 文件位于一个仓库中,这里的仓库类似于 MAVEN 的仓库,可以被用来提取依赖,或者放入依赖。 举个例子,我们将使用开放的 Maven 仓库: 例子 7.3. 加入 Maven 仓库 build.gradle repositories