2017-05-15 26 views
9

मुझे this एंड्रॉइड के बारे में समान प्रश्न मिला है, लेकिन मैं मेवेन के साथ सादे जावा का निर्माण उपकरण के रूप में उपयोग कर रहा हूं। मुझे लगता है कि एक नया सवाल पोस्ट करना बेहतर है।जावा में कोटलिन क्लास का उपयोग करना: प्रतीक नहीं मिला

मैंने एक कोटलिन क्लास बनाया है जिसके लिए मैं जावा क्लास से MyKotlinClass.class के रूप में संदर्भित करने का प्रयास कर रहा हूं। मेवेन बिल्ड विफल रहता है, जबकि इंटेलिजे आइडिया में संकलन ठीक काम करता है। मैं पहले से ही maven को Kotlin प्लगइन जोड़ लिया है:

 <plugin> 
      <groupId>org.jetbrains.kotlin</groupId> 
      <artifactId>kotlin-maven-plugin</artifactId> 
      <version>${kotlin.version}</version> 
      <executions> 
       <execution> 
        <id>compile</id> 
        <phase>compile</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>test-compile</id> 
        <phase>test-compile</phase> 
        <goals> 
         <goal>test-compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

हालांकि कि मदद नहीं करता है:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project app: Compilation failure 
[ERROR] MyClassLinkingKotlin.java:[100,40] error: cannot find symbol 

लाइन/स्तंभ वास्तव में प्रतीक MyKotlinClass.class को दर्शाता है। जब इस तरह का उपयोग कर यह भी विफल हो जाएगा:

System.err.println(MyKotlinClass.class) 
+1

कृपया हमें 'MyClassLinkingKotlin.java' विशेष रूप से लाइन 100 दिखाएं (मुझे लगता है कि इसकी [रेखा, कॉल]) – ThrowingSpoon

+0

प्रश्न में जोड़ा गया। –

+0

संभावित डुप्लिकेट [जावा से कोटलिन क्लास को चालू करने का प्रयास करने में त्रुटि] (http://stackoverflow.com/questions/43834360/error-trying-to-instantiate-a-kotlin-class-from-java) – Ilya

उत्तर

19

आपका Maven विन्यास Kotlin संकलक प्लगइन लेता है, लेकिन इतना है कि जावा कम्पाइलर Kotlin संकलक के बाद चलता है जावा प्लगइन निष्पादन को समायोजित नहीं करता है। इसलिए, जावा कंपाइलर कोटलिन से पहले चलता है, और कोटलिन-संकलित कक्षाओं को नहीं देखता है।

<build> 
    <plugins> 
     <plugin> 
      <artifactId>kotlin-maven-plugin</artifactId> 
      <groupId>org.jetbrains.kotlin</groupId> 
      <version>${kotlin.version}</version> 
      <executions> 
       <execution> 
        <id>compile</id> 
        <goals> <goal>compile</goal> </goals> 
        <configuration> 
         <sourceDirs> 
          <sourceDir>${project.basedir}/src/main/kotlin</sourceDir> 
          <sourceDir>${project.basedir}/src/main/java</sourceDir> 
         </sourceDirs> 
        </configuration> 
       </execution> 
       <execution> 
        <id>test-compile</id> 
        <goals> <goal>test-compile</goal> </goals> 
        <configuration> 
         <sourceDirs> 
          <sourceDir>${project.basedir}/src/test/kotlin</sourceDir> 
          <sourceDir>${project.basedir}/src/test/java</sourceDir> 
         </sourceDirs> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <executions> 
       <!-- Replacing default-compile as it is treated specially by maven --> 
       <execution> 
        <id>default-compile</id> 
        <phase>none</phase> 
       </execution> 
       <!-- Replacing default-testCompile as it is treated specially by maven --> 
       <execution> 
        <id>default-testCompile</id> 
        <phase>none</phase> 
       </execution> 
       <execution> 
        <id>java-compile</id> 
        <phase>compile</phase> 
        <goals> <goal>compile</goal> </goals> 
       </execution> 
       <execution> 
        <id>java-test-compile</id> 
        <phase>test-compile</phase> 
        <goals> <goal>testCompile</goal> </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

धन्यवाद, बहुत मददगार था :) – MaxG

0

मैं इस एक ही त्रुटि का सामना किया, लेकिन सही पोम सेटअप था:

यहाँ एक मिश्रित भाषा परियोजना (the documentation से लिया गया) के लिए सही विन्यास दिखा एक टुकड़ा है। मेरा मुद्दा यह था कि मैंने इंटेलिज के साथ एक कोटलिन क्लास में जावा क्लास को परिवर्तित कर दिया था, जिसने कोटलिन फ़ाइल src/main/java में छोड़ी थी।

मेरे लिए समाधान src/main/kotlin बनाना था और वहां मेरी कोटलिन कक्षा को स्थानांतरित करना था, और मेरी जावा फ़ाइलों को src/main/java में छोड़ना था। लेकिन आपको निश्चित रूप से मेवेन सेटअप की आवश्यकता है जो @ योल के उत्तर दिखाता है।

संबंधित मुद्दे