Maven编译器插件:为增量构建添加额外的依赖。

4

我希望构建一个带有长字符串常量的Java类文件。 (通常的方法是将字符串放入单独的文件中,并从与类相同的JAR加载它,但这不是一个选项。只会有一个类文件,没有JAR。)最初,我使用了multiline-string注解处理器,它允许在文档注释中放置字符串内容:

/**
 * This will be the actual
 * content of the string
**/
@Multiline static final String foo = "this literal is ignored";

我曾错误地认为:“哦,注释很麻烦,为什么不改为从外部文件加载多行字符串?”结果证明这样可以,但是我使用的构建工具 Maven 当然不会理解如果注释处理器读取的文件发生变化需要重新编译类文件。
解决方法:
  • 设置 useIncrementalCompilationfalse:并没有如我所期望的那样起作用,反而禁用了增量构建的依赖检查。
  • .py 添加到 fileExtensions 中(没想到会起作用)。
  • maven-clean-plugin 添加为初始化阶段的一部分:这个方法虽然可行,但有点杀鸡焉用牛刀。
我真正想做的是将嵌入式文件的路径添加到 Maven 的“如果此文件发生更改,请重新编译该文件”的列表中。这是否可能,或是否有另一种优雅的解决方法?

我的真正问题是...为什么一定要用类。为什么不能在运行时从类路径资源中加载数据? - Gimby
我们有一个系统,它使用只有一个方法的类文件来执行一些轻量级的处理。这是一个限制,也使得很多其他事情变得不方便,所以这个问题最终对我来说会消失。 - Caesar
1个回答

1
也许这不是一个完整的答案,而只是我对上述问题的想法:
Java中的注解处理器通常不用于更改现有类。
是的,有Lombok,它打破了这个假设,但代价是使用一些内部编译器API并“手动”编译修改后的AST:
例如,this tutorial中也写到了这一点。
通常,注解处理器可以创建一些描述符,如JSON或文件,或者是新的Java源代码,但它们从不(再次除了lombok)修改现有的源代码。
如果我理解正确,你为多行处理编写了自己的注解处理器,就像你在first link中提供的那样,但这与注解处理器的思想不兼容,所以我怀疑Maven无法帮助你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接