के साथ एक कोटलिन + जावा 9 प्रोजेक्ट का निर्माण करना मैं ग्रैडल (और जावा 9, ईमानदार होने के लिए) के लिए बिल्कुल नया हूं, और मैं जावा 9 का मिश्रण है जो एक साधारण लाइब्रेरी प्रोजेक्ट बनाने के लिए ग्रैडल का उपयोग करने की कोशिश कर रहा हूं और कोटलिन। अधिक विस्तार से, जावा में एक इंटरफ़ेस और कोटलिन में कार्यान्वयन है; मैं कोटलिन में सब कुछ करूँगा, लेकिन modules-info.java
जावा है वैसे भी, इसलिए मैंने इस तरह से काम करने का फैसला किया।ग्रैटल
मैं 1.2.0 कोटलिन प्लगइन के साथ इंटेलिजे आइडिया पर निर्माण कर रहा हूं और 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"
}
सूचना है कि मैं जावा संकलन कार्य पर एक मॉड्यूल पथ निर्दिष्ट करना पड़ा , या संकलन विफल रहता है:
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 हिस्सा ठीक हो रहा है, तो जावा भाग विफल रहता है क्योंकि यह कोटलिन पक्ष को "नहीं" देखता है, इसलिए बोलने के लिए।
मुझे लगता है कि मुझे क्लासपाथ में पहले से संकलित कोटलिन कक्षाओं को लोड करने के लिए इसे किसी भी तरह से बताना चाहिए; लेकिन (पहले) मैं इसे धीरे-धीरे कैसे कर सकता हूं? और (दूसरा) क्या यह भी संभव है? मुझे लगता है कि आप जावा 9 में मॉड्यूल पथ और कक्षा पथ को मिश्रण नहीं कर सकते हैं।
मैं इसे कैसे हल कर सकता हूं? मुझे लगता है कि यह एक बहुत ही सामान्य स्थिति है, क्योंकि प्रत्येक जावा 9-शैली मॉड्यूल एक मिश्रित भाषा मॉड्यूल होगा (module-info.java
की वजह से), इसलिए मुझे लगता है कि मुझे यहां कुछ मूलभूत याद आ रही है।
अग्रिम धन्यवाद!
पैडेंटिक होने के लिए, 'मॉड्यूल-info.java' _really_ जावा नहीं है, यह एक विशेष डीएसएल है, लेकिन कोटलिन देवताओं ने कहा है कि [इसे पुनर्निर्मित करने में कोई मूल्य नहीं दिखता] (https://discuss.kotlinlang.org/ टी/कोटलिन-समर्थन-के-जावा-9-मॉड्यूल-सिस्टम/24 99) तो यह उतना ही रहेगा। – Moira
हां, स्पष्टीकरण के लिए धन्यवाद! –
क्या होगा यदि आप या तो जावा या कोटलिन दोनों में इंटरफ़ेस और इम्प्ल रखें। क्या यह संकलित करता है? इसके अलावा, आप जेवीएम 1.8 का उपयोग कर कोटलिन क्यों संकलित करेंगे? – nullpointer