在多模块 Android 应用程序中使用immutables.iopackage-info.java
注释处理器时,使用文件时构建失败。
我已经设法在 GitHub 上构建了一个最小的测试项目来重现该问题: ImmutablesPackageInfoIssue
该项目由2个模块组成:
- 应用程序:android应用程序:
@Value.Immutable
用于AndroidIm.java
- lib:java模块:
@Value.Immutable
用于JavaIm.java
所以基本上,在两个模块中使用immutables.io都可以正常工作。
但是当我们添加一个package-info.java
文件(到com.example package
模块中app
)时,编译失败并出现以下错误:
com.android.build.api.transform.TransformException:
com.android.dex.DexException: Multiple dex files define Lcom/example/ImmutableJavaIm$1;
出现Dex错误,因为ImmutableJavaIm.java
生成了两次:
- 曾经在 lib 项目中(预期):
\build\generated\source\apt\main\com\example\ImmutableJavaIm.java
- 并且还在应用程序项目中(不应该发生):
\build\generated\source\apt\debug\com\example\ImmutableJavaIm.java
已知的解决方法:
- 删除
package-info.java
文件 - 清除/注释掉它的内容
- 配置构建以忽略
package-info.java
文件
注意:我不能忽略该文件,因为它包含构建的重要注释:例如不可变样式配置
任何想法为什么会发生这种情况或可能是什么原因?