在混合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模块的实现)
- 调用kotlin编译器(在Kotlin代码中没有Dagger生成的types)
- 调用注释处理器(处理Java文件和kotlin编译文件中的注释)
- 调用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