我对 Gradle(老实说,还有 Java 9)还很陌生,我正在尝试使用 Gradle 构建一个简单的库项目,它混合了 Java 9 和 Kotlin。更详细地说,Java 中有一个接口(interface),Kotlin 中有一个实现;我会在 Kotlin 中做所有事情,但是 modules-info.java
无论如何都是 java,所以我决定这样做。
我在 IntelliJ Idea 上构建,外部定义了 1.2.0 kotlin 插件和 gradle 4.3.1。
文件系统架构是:
+ src
+ main
+ java
+ some.package
- Roundabout.java [an interface]
- module-info.java
+ kotlin
+ some.package.impl
- RoundaboutImpl.kt [implementing the interface]
module-info.java
是:
module some.package {
requires kotlin.stdlib;
exports some.package;
}
而 build.gradle
是:
buildscript {
ext.kotlin_version = '1.2.0'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
group 'some.package'
version '1.0-PRE_ALPHA'
apply plugin: 'java-library'
apply plugin: 'kotlin'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
sourceCompatibility = 9
compileJava {
dependsOn(':compileKotlin')
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
]
classpath = files()
}
}
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version: "$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
请注意,我必须在 java compile 任务中指定模块路径,否则编译失败:
error: module not found: kotlin.stdlib requires kotlin.stdlib;
无论如何,现在这个构建失败并出现这个错误,我不知道如何解决它:
error: package some.package.impl does not exist
import some.package.impl.RoundaboutImpl;
error: cannot find symbol
return new RoundaboutImpl<>(queueSize, parallelism, worker, threadPool);
我认为编译的 Kotlin 部分运行正常,然后 java 部分失败,因为它没有“看到”kotlin 方面,可以这么说。
我想我应该告诉它在类路径中加载已经编译的 kotlin 类;但是(首先)我如何在 gradle 中做到这一点?和(第二个)有可能吗?我认为你不能在 Java 9 中混合模块路径和类路径。
我该如何解决这个问题?我认为这是一种很常见的情况,因为每个 java9 风格的模块都是混合语言模块(因为 module-info.java
),所以我认为我在这里遗漏了一些非常基本的东西.
提前致谢!
最佳答案
解决了!将 kotlin 编译目录设置为与 Java 相同的目录就足够了:
compileKotlin.destinationDir = compileJava.destinationDir
它现在可以使用同一棵树或不同树中的源;但有一个怪癖:jar
任务会生成一个所有条目都重复的 jar。接下来我会努力解决这个问题。
谢谢大家!
关于java - 使用 Gradle 构建 Kotlin + Java 9 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47657755/