【问题标题】:maven-compiler-plugin: add extra dependency for incremental buildmaven-compiler-plugin:为增量构建添加额外的依赖项
【发布时间】:2020-06-02 03:43:01
【问题描述】:

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

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

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

方法:

  • useIncrementalCompilation 设置为false:完全不符合我的预期,而是禁用增量构建的依赖关系检查
  • .py 添加到fileExtensions(没想到会这样)
  • 添加maven-clean-plugin 作为初始化阶段的一部分:这可行,但有点矫枉过正......

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

【问题讨论】:

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

标签: java maven incremental-build annotation-processor


【解决方案1】:

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

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

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

这也写成this tutorial之类的。

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

如果我没看错的话,你编写了自己的注释处理器,用于多行处理,就像你在first link 中提供的那样,但是这种与注释处理器的想法不兼容,所以我怀疑 maven 能不能帮到你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多