当前位置: 首页 > 知识库问答 >
问题:

Android多模块注释处理

吴高峰
2023-03-14

在多模块Android项目中,注释处理仍然是在任何编译完成之前的第一个任务,然后触发完整的编译。当然,这是在进入< code>app模块之前按模块完成的。

想象一下这样一种情况,一些子模块依赖于其他子模块,编译将会失败,因为依赖者还不能在它所依赖的模块中找到生成类的定义,仅仅因为它们还没有生成。

我想知道是否有一种方法可以使用<code>gradle</code>或任何其他方法强制执行所有子模块注释处理,然后以自动方式编译整个项目。这意味着如果我有3个模块,让我们将它们命名为应用程序服务执行器,其中服务和

我所寻求的是构建树将按以下顺序进行:

  1. 对所有模块执行注释处理,无需编译
  2. 然后调用完整的项目编译

到目前为止,我发现了一些有希望的线索,使用java编译器的选项-proc:{none;only},其中值only应调用注释处理,而无需进一步编译。我已尝试将此选项传递给编译器,但编译仍按每个子模块的顺序进行。

有什么想法吗?


共有1个答案

葛越泽
2023-03-14

经过对这个主题的深入调查,长时间的阅读和许多tee和咖啡杯,我发现我的项目设置不太正确,我还发现Kotlin android插件有自己悲伤和阴暗的事实,我希望我可以在这个答案中澄清,所以拿起一杯tee/coffee,享受阅读。

  1. 有没有办法触发kotlin编译两次?简短的回答是“不”!,这仅仅是因为gradle本身有一个非循环依赖关系图,这意味着不可能有循环依赖关系,因此每次gradle调用任务只运行一次
  2. 我们如何解决这个限制?有两种选择,要么我们添加一个新的源代码集(对于android,这将通过添加新的构建类型),要么简单地打破鸡/蛋困境,使用工件

我对每一种可能的解决方案都做了很多实验,但还是有点可疑。首先,这里有一个线程,我问了gradle用户我的问题。尽管它没有解决我的问题,但它仍然揭示了问题本身的根源,即鸡/蛋的困境。

为了进一步澄清我的问题,我继续进行调查,并向 kotlin 开发人员询问如何使用 kotlin gradle 插件来做到这一点。请在这里找到答案

短篇故事:没有办法直接扩展kotlinCompile gradle任务,因为有一个“代码”可以启动编译。我的意思是确定,但为什么它以这种方式设计得很差?为什么像kotlin这样漂亮的语言必须匆忙制作那个特定的据称功能强大的插件,以及为什么它的来源从那以后从未被更新/审查过?

我个人不喜欢这个解决方案,因为它限制了灵活性,而且还进一步抽象了编译任务。

使用gradle的另一种有希望的方式是工件,其中模块自己构建它并生成一个工件(在我们的例子中通常是一个jar),该工件将被其他项目使用。这听起来很酷吧?不幸的是,没有办法将此库添加到使用者的类路径中,编译将失败。

这些是我的发现,请随时更新我的知识或纠正我,如果我有错误的理解。

祝您编码愉快!

 类似资料:
  • 本文向大家介绍PowerShell单行注释、多行注释、块注释的方法,包括了PowerShell单行注释、多行注释、块注释的方法的使用技巧和注意事项,需要的朋友参考一下 PowerShell的注释符分为行注释符和块注释符。行注释符使用井号(#)引起一行;块注释符使用“<#”和 “#>”来引起一段注释。 行注释符 举例如下: 块注释符、多行注释 举例如下: 这是小编每次写脚本之前,都会定义的一段关于脚

  • 有人知道如何在Android项目中启用Eclipse中的注释处理吗?我做了以下工作: 使用处理器和META-INF创建Java项目 如果我从文件夹中删除jar文件,Eclipse会报告项目中的错误,因为找不到注释处理器。但是,如果处理器就位并且配置了Eclipse,则不会进行处理 如果我在标准Java项目中使用相同的处理器,它就可以正常工作<有人能帮我吗?谢谢

  • 问题内容: 什么时候在方法开始时使用块注释,什么时候使用Javadoc风格的注释? 在Java样式指南的“注释”部分中,我发现了这一点: Java程序可以有两种注释:实现注释和文档注释。实现注释是在C ++中发现的,由,和// 分隔。文档注释(称为“文档注释”)仅适用于Java,并以分隔。可以使用javadoc工具将Doc注释提取到HTML文件中。 实现注释用于注释掉代码或有关特定实现的注释。Do

  • 本文档描述了什么是多路处理模块以及它如何为Apache所使用。 简介 Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。不同的平台和不同的环境经常产生不同的需求,或是为了达到同样的最佳效果而采用不同的方法。Apache凭借它的模块化设计很好的适应了大量不同的环境。这一设计使得网站管理员能够在编译时和运行时凭借载入不同的模块来决定服务器的不同附加功能。

  • 本文向大家介绍racket 块注释,包括了racket 块注释的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?