java - ग्रेडल के साथ जावा से पहले/साथ स्काला संकलित करना




scala compiler-errors (2)

मुझे समस्या को ठीक करने के लिए निम्न स्रोतसैट कॉन्फ़िग मिला है:

sourceSets {
    main {
        scala {
            srcDirs = ['src/main/scala', 'src/main/java']
        }
        java {
            srcDirs = []
        }
}

यह क्योंकि स्कैला स्रोत सेट में जावा और स्कला दोनों स्रोत शामिल हो सकते हैं।

डिफ़ॉल्ट स्काला प्लगइन कार्य प्रवाह जावा को स्काला से पहले संकलित करता है, इसलिए जावा में स्काला स्रोतों को आयात करने के कारण "त्रुटि: प्रतीक नहीं मिल सकते"


अगर आपका Java कोड जावा क्लास बनाने के लिए स्लैला कंपाइलर का उपयोग करके लॉम्बॉक जैसी कुछ बाहरी लाइब्रेरीज़ का उपयोग करेगा, क्योंकि स्केल कंपाइलर एनोटेशन नहीं जानते।

मेरा समाधान कार्य निर्भरता को बदलना है, जावा से पहले स्काला को संकलित करना है।

tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")

अब compileScala से पहले कार्य compileScala चलाता है, यही तो है।

यदि आपका जावा कोड स्कैला कोड पर निर्भर करता है, तो आपको दो और कदम करने की आवश्यकता है,

  1. स्काला और जावा के आउटपुट फ़ोल्डर को अलग करें,

    sourceSets {
        main {
            scala {
                outputDir = file("$buildDir/classes/scala/main")
            }
            java {
                outputDir = file("$buildDir/classes/java/main")
            }
        }
  2. compileJava लिए निर्भरता के रूप में compileJava आउटपुट जोड़ें,

    dependencies {
        compile files("$sourceSets.main.scala.outputDir")
    }




cross-compiling