Gradle(とJava 9、正直言って)はかなり新しく、Gradleを使ってJava 9とKotlin。より詳細には、Javaにはインタフェースがあり、Kotlinには実装されています。私はKotlinですべてをやるが、とにかくmodules-info.java
はjavaなので、私はこのようにすることにした。GradleでKotlin + Java 9プロジェクトを構築する
私は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
されています。私は、Javaのコンパイルタスクのモジュールパスを指定する必要がありました
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"
}
お知らせコンパイルが失敗します:
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の一部がOK起こっていると思い、 Javaの部分は失敗するので、Kotlinの側を「見る」ことはできません。
すでにコンパイルされたkotlinクラスをクラスパスにロードする方法を教えてください。しかし(最初に)私はどのようにこれをgradleで行うのですか? (第2)も可能です? Java 9ではモジュールパスとクラスパスを混在させることはできないと思います。
どうすればこの問題を解決できますか?すべてのjava9スタイルのモジュールは(module-info.java
のために)混合言語モジュールになるので、かなり一般的な状況だと思うので、ここでは基本的なものが欠けていると思います。
ありがとうございます!
が賢明であるため、 'module-info.java'は特別なDSLではありませんが、Kotlinの開発者はこれを再発明することに価値がないと言っています(https://discuss.kotlinlang.org/ t/kotlin-support-for-java-9-module-system/2499)、それはそのままの状態です。 – Moira
はい、明確化のおかげで! –
インタフェースとインプリメントの両方をJavaまたはKotlinに保存するとどうなりますか?それはその後コンパイルされますか?また、JVM 1.8を使用してKotlinをコンパイルする理由は何ですか? – nullpointer