Gradle生成中Kotlin扩展函数的未解析引用
我有一个多项目的Gradle构建,所有代码都是用Kotlin编写的。其中有两个项目:common和client。子项目位于中间文件夹中,如“demo”。因此,文件夹结构是:Gradle生成中Kotlin扩展函数的未解析引用,gradle,extension-methods,kotlin,Gradle,Extension Methods,Kotlin,我有一个多项目的Gradle构建,所有代码都是用Kotlin编写的。其中有两个项目:common和client。子项目位于中间文件夹中,如“demo”。因此,文件夹结构是: project demo client build.gradle common build.gradle build.gradle gradle.properties settings.gradle settings.gradle: rootProject.name
project
demo
client
build.gradle
common
build.gradle
build.gradle
gradle.properties
settings.gradle
settings.gradle:
rootProject.name = 'demo'
include 'demo/client'
include 'demo/common'
客户端依赖于公共项目编译项目(“:demo/common”)
。在公共项目中有一个扩展功能:
fun <T> List<Future<T>>.getAll(): Long {
var count = 0L
this.forEach {
it.get()
count++
}
return count
}
同时,如果我将getAll
声明放在客户机项目中,那么一切都可以正常编译。我很确定函数的导入是正确的,但同时我对Gradle有一些经验,所以可能会遗漏一些东西
- 构建:
gradlew干净构建
- 科特林:1.0.2
- 格拉德尔:2.9
UPD:问题出在文件夹结构中(或者可能是我声明的依赖项错误…)-如果我删除中间文件夹,演示一切正常。检查是否在root
设置中包含这两个项目。gradle
检查最小的工作设置
设置。渐变:
rootProject.name = 'demo'
include 'client'
include 'common'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
}
}
subprojects {
apply plugin: 'kotlin'
repositories {
jcenter()
maven {
url "http://repository.jetbrains.com/all"
}
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
}
}
构建.渐变:
rootProject.name = 'demo'
include 'client'
include 'common'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
}
}
subprojects {
apply plugin: 'kotlin'
repositories {
jcenter()
maven {
url "http://repository.jetbrains.com/all"
}
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
}
}
common/src/main/kotlin/by/dev/madhead/demo/common/Funktions.kt
package by.dev.madhead.demo.common
fun String.revert(): String {
return this.reversed()
}
package by.dev.madhead.demo.client
import by.dev.madhead.demo.common.revert
fun main(args: Array<String>) {
println("Hello".revert())
}
客户端/构建.gradle
dependencies {
compile project(':common')
}
client/src/main/kotlin/by/dev/madhead/demo/client/App.kt
package by.dev.madhead.demo.common
fun String.revert(): String {
return this.reversed()
}
package by.dev.madhead.demo.client
import by.dev.madhead.demo.common.revert
fun main(args: Array<String>) {
println("Hello".revert())
}
package by.dev.madhead.demo.client
由.dev.madhead.demo.common.revert导入
趣味主线(args:Array){
println(“Hello”.revert())
}
好的,问题出在gradle.settings中包含的错误子项目中。应该是
include 'demo:common'
include 'demo:client'
而不是
include 'demo/common'
include 'demo/client'
然后对于依赖项
编译项目(“:demo:common”)
仍然没有成功。如果扩展位于客户机子项目中,然后在客户机子项目中移动它时中断,则所有内容都可以正常编译。这两个子项目都包含在settings.gradle中。Upd:但是在你的设置中一切都很好-我应该检查一下是否有任何差异。问题在于项目的结构。我在项目中有一个中间文件夹(比如“demo”),其中有common和client文件夹。更新了问题以反映这一事实。神奇的clean
/build
为我解决了这个问题