首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android多模块标注处理

Android多模块标注处理
EN

Stack Overflow用户
提问于 2020-05-28 07:31:26
回答 1查看 589关注 0票数 6

在多个模块中,在完成任何编译之前,仍然首先执行Android项目注释处理,然后触发完整的编译。当然,在进入app模块之前,每个模块都要这样做。

假设某些子模块依赖于其他模块,编译将失败,因为依赖者还不能还不能找到它所依赖的模块中生成的类的定义,因为它们还没有生成。

我想知道是否有一种方法可以使用gradle或其他方式强制执行所有子模块、注释处理,然后以自动方式编译整个项目。这意味着,如果我有3个模块,让我们将它们命名为appservicesexecutors,其中services依赖于executors

我正在寻找的是,构建树将按照以下顺序排列:

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

到目前为止,我发现了一些使用java compiler's选项-proc:{none;only}的有希望的线索,在这里,值only应该调用注释处理而无需进行任何进一步的编译。我已经尝试将这个option传递给我的编译器,但是仍然是编译,每个子模块依次执行子模块。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-08 07:31:58

经过对这个主题的深入调查,长时间的阅读,以及很多的T恤和咖啡杯,我了解到我的项目设置不太正确,我也发现Kotlin android插件有它自己的悲哀和阴暗的事实,我希望我能在这个答案中澄清,所以拿一杯T恤/咖啡,享受阅读吧。

  1. 有办法触发两次kotlin编译吗?简单地回答是 no !,这仅仅是因为gradle it self有一个无循环依赖图,这意味着不应该有循环依赖项,因此每个gradle调用只能运行一次任务。
  2. 怎样才能解决这个问题呢?有两个选择,要么我们添加一个新的Source set (将通过添加一个新的buildType为安卓),要么简单地打破鸡/蛋困境的奇迹,使用工件。

我对每一种可能的解决方案都做了大量的实验,但还是有一些东西让人觉得有点可疑。首先,这里是我向gradle用户询问我的问题的一个线程。尽管它并没有解决我的问题,但它仍然揭示了问题本身的根源,即“The鸡/蛋困境”()。

为了进一步澄清我的问题,我进行了调查,并询问了kotlin开发人员如何使用kotlin插件。请找出答案这里

短篇小说:--没有办法直接扩展kotlinCompile级任务--,因为有一个启动编译的“代码”。我的意思是,当然,但为什么它是如此糟糕的设计?为什么像kotlin这样漂亮的语言必须赶着生产那个被认为功能强大的插件,而最主要的原因是为什么它的源代码从那时起就没有被更新/评论过?

解决这个问题的方法是使用它们的句柄KotlinCompilation入口点。我个人不喜欢这个解决方案,因为它限制了灵活性的水平,而且还进一步抽象了编译任务。

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

这些都是我的发现,如果我错误地理解了什么,请随时更新我的知识或者纠正我。

编码愉快!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62059261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档