在混合Java / Kotlin项目中使用Dagger 2的Maven配置

什么是在混合Java / Kotlin项目中使用Dagger 2的建议Maven设置?

我find了一个使用Gradle的示例项目: https : //github.com/damianpetla/kotlin-dagger-example与Maven类似的东西会非常有帮助。


更新:我试过了什么?

我使用了kotlinlang.org/docs/reference/using-maven.html中的Kotlin配置和google.github.io/dagger中的Dagger配置。 我还使用了build-helper-maven-plugin插件来将注释处理集成到IDEA中。

我的主要问题是我遇到了编译周期。 我的配置混合了Kotlin的编译和调用生成Dagger2类的注释处理器。 我无条件地尝试分离两个阶段,但缺乏更深入的Maven了解它的工作。

javac可以扫描源文件(java)和类来搜索注释: http : //docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#processing

这意味着如果你没有任何在Kotlin代码中引用的Dagger生成的类(这意味着Dagger模块的实现)

  1. 调用kotlin编译器(在Kotlin代码中没有Dagger生成的types)
  2. 调用注释处理器(处理Java文件和kotlin编译文件中的注释)
  3. 调用java编译器 – 可以访问Dagger生成的types和Kotlintypes

你可以用java和kotlin编写你的服务,但是模块必须由java类创建

这是相应的pom.xml

  4.0.0 com.test testkotlindagger 1.0-SNAPSHOT  1.0.6 2.7    org.jetbrains.kotlin kotlin-stdlib ${kotlin.version}   org.jetbrains.kotlin kotlin-test ${kotlin.version} test    com.google.dagger dagger ${dagger2.version}   com.google.dagger dagger-compiler ${dagger2.version} true      kotlin-maven-plugin org.jetbrains.kotlin ${kotlin.version}   compile compile  compile    src/main/java src/main/kotlin     test-compile test-compile  test-compile      org.bsc.maven maven-processor-plugin 2.2.4   process  process  compile  target/generated-sources/annotations      org.apache.maven.plugins maven-compiler-plugin 3.5.1    default-compile none    default-testCompile none   java-compile compile  compile    java-test-compile test-compile  testCompile        

另一方面,如果您在kotlin代码中包含了Dagger生成的types,则必须在编译kotlin代码之前提供这些types,这意味着您需要Kotlin-aware注释处理器(KAPT)

在这种情况下,问题归结为这样一个问题: 是否在maven中支持kapt?

可悲的是,答案是否定的,但有一个错误提交支持: https : //youtrack.jetbrains.com/issue/KT-14478