2015-12-06 14 views
5

एक मिश्रित जावा/Kotlin परियोजना में Dagger 2 उपयोग करने के लिए सिफारिश की Maven सेटअप क्या है?Maven विन्यास

मुझे एक नमूना प्रोजेक्ट मिला जो ग्रैडल का उपयोग करता है: https://github.com/damianpetla/kotlin-dagger-example मेवेन के साथ कुछ ऐसा ही उपयोगी होगा।


अपडेट: मैंने क्या प्रयास किया है?

मैंने kotlinlang.org/docs/reference/using-maven.html और google.github.io/dagger से डैगर कॉन्फ़िगरेशन से कोटलिन कॉन्फ़िगरेशन का उपयोग किया। मैं भी विचार में एनोटेशन प्रसंस्करण को एकीकृत करने के build-helper-maven-plugin प्लगइन का इस्तेमाल किया।

मेरा मुख्य समस्या यह है कि मैं संकलन चक्र में चलाने था। मेरे विन्यास Kotlin का संकलन मिलाया और एनोटेशन प्रोसेसर है, जो Dagger2 वर्गों उत्पन्न बुला। मैं unsystematically दोनों चरणों को अलग करने की कोशिश की लेकिन यह काम करने के लिए समझने गहरी Maven का अभाव है।

उत्तर

1

javac एनोटेशन के लिए खोज में दोनों स्रोत फ़ाइलें (जावा) और वर्गों स्कैन कर सकते हैं: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#processing

इसका मतलब यह है कि आप इस काम कर सकते हैं अगर आप Kotlin कोड में संदर्भित किसी डैगर-उत्पन्न वर्गों की जरूरत नहीं है (जो डैगर मॉड्यूल कार्यान्वयन)

  1. आह्वान kotlin संकलक (कोई डैगर उत्पन्न प्रकार Kotlin कोड में)
  2. आह्वान एनोटेशन प्रोसेसर (दोनों जावा फ़ाइलें और kotlin संकलित फ़ाइलें)
  3. 012,351 में एनोटेशन प्रक्रियाओं का मतलब
  4. आह्वान जावा संकलक - और दोनों डैगर उत्पन्न प्रकार के लिए उपयोग Kotlin प्रकार

आप दोनों जावा और kotlin में अपनी सेवाओं को लिख सकते हैं, लेकिन मॉड्यूल एक जावा वर्ग

यहाँ से बनाया जाना चाहिए है इसी pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>testkotlindagger</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <kotlin.version>1.0.6</kotlin.version> 
     <dagger2.version>2.7</dagger2.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.jetbrains.kotlin</groupId> 
      <artifactId>kotlin-stdlib</artifactId> 
      <version>${kotlin.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jetbrains.kotlin</groupId> 
      <artifactId>kotlin-test</artifactId> 
      <version>${kotlin.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <!-- Dagger 2 --> 
     <dependency> 
      <groupId>com.google.dagger</groupId> 
      <artifactId>dagger</artifactId> 
      <version>${dagger2.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.dagger</groupId> 
      <artifactId>dagger-compiler</artifactId> 
      <version>${dagger2.version}</version> 
      <optional>true</optional> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 

      <plugin> 
       <artifactId>kotlin-maven-plugin</artifactId> 
       <groupId>org.jetbrains.kotlin</groupId> 
       <version>${kotlin.version}</version> 
       <executions> 
        <execution> 
         <id>compile</id> 
         <phase>compile</phase> 
         <goals> <goal>compile</goal> </goals> 
         <configuration> 
          <sourceDirs> 
           <source>src/main/java</source> 
           <source>src/main/kotlin</source> 

          </sourceDirs> 
         </configuration> 
        </execution> 
        <execution> 
         <id>test-compile</id> 
         <phase>test-compile</phase> 
         <goals> <goal>test-compile</goal> </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.bsc.maven</groupId> 
       <artifactId>maven-processor-plugin</artifactId> 
       <version>2.2.4</version> 
       <executions> 
        <execution> 
         <id>process</id> 
         <goals> 
          <goal>process</goal> 
         </goals> 
         <phase>compile</phase> 
         <configuration> 
          <outputDirectory>target/generated-sources/annotations</outputDirectory> 

         </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> 

</project> 

दूसरी ओर, यदि आप अपने kotlin कोड में डैगर-उत्पन्न प्रकारों में शामिल हैं, तो आप इन से पहले उपलब्ध kotlin कोड संकलित किया गया है, जो आपको kotlin अवगत एनोटेशन प्रोसेसर की जरूरत का मतलब है (KAPT होना आवश्यक है)

इस परिदृश्य में समस्या सवाल करने पर निर्भर करता: Is kapt supported in maven?

दुःख की बात है जवाब नहीं है, लेकिन वहाँ एक बग यह समर्थन करने के लिए दायर की है: https://youtrack.jetbrains.com/issue/KT-14478

+1

FYI के.टी.-14,478 तय किया गया है और इस तरह kapt अब अपडेट के लिए धन्यवाद @Markus Maven –

+0

में समर्थित है – Lesiak