在处理器生成的类

时间:2017-08-22 16:32:04

标签: java android annotations dependencies gson

我正在开发一个库来使用注释和处理器生成类。生成的类应使用谷歌的Gson库。

我的问题是:我应该在哪里添加Gson依赖项?我目前正在将它添加到处理器build.gradle中,但是当生成类时,找不到Gson并且Android Studio正在建议将其添加到app模块。

处理器

build.gradle

implementation project(':lib-annotation')
implementation 'com.squareup:javapoet:1.9.0'
implementation 'com.google.code.gson:gson:2.8.1'
implementation 'com.google.auto.service:auto-service:1.0-rc3'
应用

build.gradle

implementation project(':lib-annotation')
annotationProcessor project(':lib-processor')

非常感谢任何帮助,谢谢!

P.S。该项目旨在成为一个图书馆。我希望用户只将我的库包含在他们的gradle文件中,而不是“子依赖”。

4 个答案:

答案 0 :(得分:2)

仅使用实施会阻止您使用传递依赖

主项目无法使用或调用您添加到库中的依赖项。

在提醒docs时,应使用实现配置来声明组件内部的依赖关系。

因此,您必须使用apicompile代替implementation或向您的传递库添加条件,例如: -

implementation ('com.google.code.gson:gson:2.8.1'){
    transitive = true;
}

答案 1 :(得分:1)

除了事实实现隐藏依赖关系并因此将其保持在应用程序的路径之外(因此,如果您需要公开Gson,避免使用实现),问题是由于编译/实现库模块而不是使用常规aar / jar / apklib包。试试这个:

- 将Android Maven Gradle插件添加到库项目并配置它。

- 使用插件,编译并将库安装到本地maven存储库中。 - 不使用compile / api / implementation将库添加到app,将mavenLocal()包含到build.gradle中,然后将库添加为常规依赖项。所有必要的依赖都应该存在。

这是插件的一个示例,如果您需要它:https://github.com/fcopardo/EnhancedMapView

答案 2 :(得分:0)

答案 3 :(得分:0)

好的,我终于解决了这个问题!

我必须使用Gson implementationcompile依赖项添加到处理器 build.gradle中:

implementation 'com.google.code.gson:gson:2.8.1'

使用compile将依赖项再次添加到注释 build.gradle中:

compile 'com.google.code.gson:gson:2.8.1'

我认为它不起作用,因为Gson依赖项位于处理器 build.gradle中,使用annotationProcessor 'lib-processor'(不知何故,"}及物性"没有适用)。因此,我将Gson依赖项放在注释 build.gradle中,因为我使用implementation 'lib-annotation'包含它并且它有效。

希望它会有所帮助