2015-12-06 18 views
5

混合Java/KotlinプロジェクトでDagger 2を使用するための推奨Maven設定は何ですか?混合Java/KotlinプロジェクトでDagger 2を使用するためのMaven設定

Gradleを使用したサンプルプロジェクトが見つかりました:https://github.com/damianpetla/kotlin-dagger-example Mavenと同様のものが非常に役に立ちます。


更新:私は何を試しましたか?

私はgoogle.github.io/daggerからkotlinlang.org/docs/reference/using-maven.html からKotlin構成とダガーコンフィギュレーションを使用していました。 IDEAの注釈処理を統合するためにbuild-helper-maven-pluginプラグインも使用しました。

私の主な問題は、私がコンパイルサイクルを実行していることでした。私の設定では、KotlinのコンパイルとDagger2クラスを生成する注釈プロセッサの呼び出しが混在していました。私は体系的に両方のフェーズを分離しようとしましたが、Mavenをより深く理解して動作させることができませんでした。これは、あなたがKotlinコードで参照されるダガーで生成されたクラスを(持っていない場合は、この作業を行うことができることを意味し http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#processing

答えて

1

javacは、両方のソースファイル(Javaの)と注釈の検索のクラスをスキャンすることができますこれダガーモジュールの実装を意味する)

  1. kotlinコンパイラを呼び出す(何ダガーはkotlinコード内の型を発生しない)
  2. 呼出し注釈プロセッサ(javaファイルとkotlin、コンパイルされたファイルの両方に注釈を処理する)
  3. 呼び出しJavaコンパイラ - の両方ダガーへのアクセスは、種類やKotlinタイプ

が生成されていますが、Javaとkotlinの両方であなたのサービスを書くことができますが、モジュールはJavaクラスによって

を作成する必要がありますがここにあります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対応の注釈プロセッサを必要とするKAPTを意味し、これらは利用できる持っている必要があります)

問題が問題に帰着する。このシナリオでは: 悲しいことIs kapt supported in maven?

、答えはノーですが、それをサポートするために提出されたバグがあります: https://youtrack.jetbrains.com/issue/KT-14478

+1

FYI KT-14478が修正されましたしたがって、kaptはmavenでサポートされています –

+0

@Markusアップデートのおかげで – Lesiak

関連する問題