के साथ जावा के साथ/साथ स्केलिंग संकलन डिफ़ॉल्ट स्कैला प्लगइन कार्य प्रवाह जावा से स्केल स्रोत आयात करने से पहले जावा को संकलित करता है, इसलिए "त्रुटि: प्रतीक नहीं मिल सकता"। ग्रैडल
Q
ग्रैडल
12
A
उत्तर
21
मैं निम्नलिखित sourceSet config पाया समस्या को ठीक करने के लिए:
sourceSets {
main {
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
java {
srcDirs = []
}
}
इसका कारण यह है स्केला स्रोत सेट दोनों जावा और स्केला स्रोतों में शामिल कर सकते हैं।
0
यदि आपका जावा कोड जावा क्लास बनाने के लिए स्कैला कंपाइलर का उपयोग करके लंबोक जैसे कुछ बाहरी पुस्तकालयों का उपयोग करता है, तो स्कैला कंपाइलर एनोटेशन नहीं जानता है।
मेरा समाधान कार्य निर्भरताओं को बदलने के लिए है, जावा से पहले स्कैला संकलित करना।
tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")
अब काम compileScala
रन compileJava
से पहले, बस इतना ही।
अपने जावा कोड स्केला कोड पर निर्भर करता है, तो आप दो और चरण करने की ज़रूरत है,
अलग स्केला और जावा के आउटपुट फ़ोल्डर,
sourceSets { main { scala { outputDir = file("$buildDir/classes/scala/main") } java { outputDir = file("$buildDir/classes/java/main") } }
रूप स्केला उत्पादन जोड़े
compileJava
के लिए एक निर्भरता,dependencies { compile files("$sourceSets.main.scala.outputDir") }
संबंधित मुद्दे
- 1. ग्रैडल
- 2. ग्रैडल
- 3. ग्रैडल
- 4. ग्रैडल
- 5. ग्रैडल
- 6. ग्रैडल
- 7. ग्रैडल
- 8. ग्रैडल
- 9. ग्रैडल
- 10. ग्रैडल
- 11. ग्रैडल
- 12. ग्रैडल
- 13. ग्रैडल
- 14. ग्रैडल
- 15. ग्रैडल
- 16. ग्रैडल
- 17. ग्रैडल
- 18. ग्रैडल
- 19. ग्रैडल
- 20. ग्रैडल
- 21. ग्रैडल
- 22. ग्रैडल
- 23. ग्रैडल
- 24. ग्रैडल
- 25. ग्रैडल
- 26. ग्रैडल
- 27. ग्रैडल
- 28. ग्रैडल
- 29. ग्रैडल
- 30. ग्रैडल
यदि आप जावा और स्कैला स्रोतों को अलग-अलग निर्देशिकाओं में रखना चाहते हैं और सभी कोड संयुक्त संकलित करना चाहते हैं, तो यह सही समाधान है। एक विकल्प डिफ़ॉल्ट सेटअप को रखना है और जावा कोड को 'src/main/scala', और शेष जावा कोड (यदि कोई है) में' src/main/java' में संकलित किया गया है। –
धन्यवाद। हम सोच रहे हैं कि compileScala के साथ संकलित जावा कोड संकलित जावा के साथ संकलित किए जाने से अलग तरीके से व्यवहार करेगा। हम मानते हैं कि वे एक ही कंपाइलर का उपयोग करते हैं, इस प्रकार नीचे एक ही बाइटकोड उत्पन्न करते हैं, लेकिन स्कैला स्रोत से जोड़ने की अनुमति देते हैं। क्या वो सही है? – crizCraig
संयुक्त संकलन स्कैला कंपाइलर द्वारा नियंत्रित किया जाता है, जो इस मामले में जावा कंपाइलर का आह्वान करने के लिए ज़िम्मेदार है। परिणाम आम तौर पर वही होना चाहिए। ध्यान दें कि संयुक्त संकलित जावा कोड के जावा संकलन विकल्पों को प्रभावित करने के लिए आपको 'compileJava.options' के बजाय' compileScala.options' को कॉन्फ़िगर करना होगा। (स्कैला संकलन विकल्प 'compileScala.scalaCompileOptions' के माध्यम से नियंत्रित होते हैं।) आप शायद सभी संकलन कार्यों (जैसे 'tasks.withType (ScalaCompile) {options ...}') पर ऐसी कोई कॉन्फ़िगरेशन लागू करना चाहते हैं। –