Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释处理第三方库_Java_Android_Android Databinding_Annotation Processing_Android Binding Adapter - Fatal编程技术网

Java 注释处理第三方库

Java 注释处理第三方库,java,android,android-databinding,annotation-processing,android-binding-adapter,Java,Android,Android Databinding,Annotation Processing,Android Binding Adapter,我正在为一个Android项目编写注释处理器,遇到了一种情况。我想处理库模块中的注释类,即应用程序模块依赖于库模块,需要处理库模块中的注释类 但是,注释处理器无法从依赖项“查看”注释,可能是因为代码已经编译。有关其他库的问题,请参阅。我的项目问题的一个证明在分支上。处理来自sample模块的注释,但不处理来自lib模块的注释 这一切都很好,我已经放弃了没有这个功能的生活,但事实证明Android数据绑定库可以处理来自模块甚至第三方库的注释。例如,库提供了应用程序可以很好地处理的@BindingA

我正在为一个Android项目编写注释处理器,遇到了一种情况。我想处理库模块中的注释类,即应用程序模块依赖于库模块,需要处理库模块中的注释类

但是,注释处理器无法从依赖项“查看”注释,可能是因为代码已经编译。有关其他库的问题,请参阅。我的项目问题的一个证明在分支上。处理来自
sample
模块的注释,但不处理来自
lib
模块的注释

这一切都很好,我已经放弃了没有这个功能的生活,但事实证明Android数据绑定库可以处理来自模块甚至第三方库的注释。例如,库提供了应用程序可以很好地处理的
@BindingAdapter
方法

我在我使用的注释上设置保留类型,但没有用。我能看到的唯一显著区别是,数据绑定处理器以方法为目标,而我的方法以类(类型)为目标,但我认为这与处理器没有什么区别。所以我认为这可能与数据绑定处理器是Android插件的一部分有关,但我不确定这有什么帮助


有人知道这是怎么做到的吗?

Android数据绑定也不能处理依赖项上的注释。相反,它在库的编译时处理库,并将信息保存到一个中间文件,作为其存档的一部分(例如jar文件)。然后,它从依赖项加载该中间文件信息,而不是读取注释


如果您将中间信息保存为jar文件依赖项的一个资源,那么您可以非常轻松地从jar文件中提取它。如果我没记错的话,它应该在类路径中,您可以使用ClassLoader的getResource()方法。我的记忆可能有点陈旧,因为它不再使用jar文件来存储中间文件信息。

我被你的问题弄糊涂了。有没有一个例子,你可以提供,不做你想做的?就我所知,编译与否并不重要,只要保留策略是运行时的。我的理解是,这对于运行时处理器注释来说并不重要,但对于编译时处理器注释来说却很重要,这是Android上出于性能原因而更常用的模式。我现在还没有设置示例项目,但是在您的任何项目中包括我引用的ClassIndex项目都应该演示引用问题中提到的问题。“注释处理器无法从依赖项“查看”注释,可能是因为代码已经编译了”-您给我们的链接中的回复是“定制处理器‘只看到’编译的类。”似乎您没有阅读回复。它可能包含可以解决您的问题的信息。不,您混淆了这两种用法。他的意思是注释处理器在编译过程中运行,因此它“看到”传递给java编译器的类。来自任何第三方依赖项的类都是预编译的,因此对于正在编译的项目,编译器不会“看到”它们,它们是按原样打包的。但这与编译/非编译限制无关。这就是那个特别的图书馆的工作原理。我认为你用不相关的信息污染了这个问题。也许我过于简化了,但问题似乎只是如何扫描外部库中的注释。我也考虑过这一点,但数据绑定生成的文件是由插件在编译时编写的,因此这意味着资源文件(来自依赖项)需要由插件读取,以便在生成的文件中包含对它们的引用。这意味着依赖项中的资产在构建时可供插件使用?我没有想到会是这样。是的,资产在构建时可用于应用程序。必须合并所有资源,以便您可以从应用程序访问它们。