4

我想用一个带有长的多行字符串常量的类来构造一个 java 类文件。(将字符串放入单独的文件并从与类相同的 JAR 加载它的常用方法不是一个选项。不会有 JAR,只有那个类文件。)最初,我使用的是多行字符串注释处理器,它允许将字符串内容放在文档注释中:

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

在这里我误以为:“哦,注释不方便,为什么不更改多行字符串以从外部文件加载内容?” 事实证明这是可行的,但是 maven(我正在使用它来构建)当然不明白如果注释处理器读取的文件发生更改,则需要重新编译类文件。

方法:

  • 设置useIncrementalCompilationfalse:根本不符合我的预期,而是禁用增量构建的依赖项检查
  • 添加.pyfileExtensions(没想到会起作用)
  • 添加maven-clean-plugin作为初始化阶段的一部分:这可行,但有点矫枉过正......</li>

我真正想做的是将嵌入文件的路径添加到 maven 的“如果此文件更改,请重新编译该文件”列表中。这是可能的,还是有另一种优雅的方法来解决这个问题?

4

1 回答 1

1

也许这不是一个完整的答案,而只是我对上述内容的看法:

Java 中的注释处理器通常不用于更改现有类。

是的,有 Lombok,这种假设打破了这种假设,但代价是使用一些内部编译器内部 API 并“手动”编译修改后的 AST:

例如,这也写在本教程中。

通常注释处理器可以创建一些描述符,如 JSON 或文件,或者,或者新的 Java 源,但它们从不(同样除了 lombok)修改现有源。

如果我没看错,您编写了自己的注释处理器来进行多行处理,就像您在第一个链接中提供的那样,但是这种与注释处理器的想法不兼容,所以我怀疑 maven 可以提供帮助你在这里。

于 2020-02-18T12:35:54.270 回答