【问题标题】:Maven process-classes, only process the ones changed by compiler:compileMaven 进程类,只处理编译器改变的那些:编译
【发布时间】:2012-06-08 11:20:12
【问题描述】:

我编写了一个 maven mojo,它对文件集指定的一组 java 类进行就地 JavaFlow 检测。即 srcfile = destfile。

插件在进程类阶段触发。

如果我执行 mvn clean install,效果会很好。 但是,如果我在 mvn clean install 之后执行 mvn install 它会再次运行处理,即使所有类文件都没有更改。就我而言,这非常非常糟糕...... :(

由于我进行了适当的检测,我也不能真正使用文件时间戳。

我需要一些方法来告诉我的 mojo 只在编译器重新编译的文件上运行:编译...有什么想法吗?

【问题讨论】:

  • 位于 target/your-maven-plugin/.... 中的文件的校验和怎么样?
  • 是的...那是我的备用计划... :( 现在我正在查看 StaleSourceScanner,它是编译器插件用来检测陈旧资源的工具。但无论我做什么我都可以'不能让它检测到任何陈旧的东西:(
  • 你有没有看过 maven-compiler-plugin 它是如何在那里解决的......也许你可以拿代码?
  • 是的,他们使用 StaleSourceScanner,但它似乎会在编译后更新其内部数据,所以对于我的插件来说它永远不会过时:/
  • 我最终做了校验和的事情......希望它以后不会在我面前爆炸。如果您想要答案学分,请将其作为答案发布:)

标签: java maven maven-plugin


【解决方案1】:

我尝试使用 StaleSourceScanner,但它没有按我的意愿工作。

所以我最终在检测后对文件进行校验和,并在下一个构建步骤中检查它们。

作为一项额外的安全措施,我修改了 JavaFlow 源代码,以便如果一个类被检测两次,则会引发异常。

编辑:实际上,现在我使用 ASM 来检查该类是否已被检测...如果有,请不要检测它。不再有校验和。

【讨论】:

  • Marc,您如何检查该文件是否已通过 ASM 检测?
  • 哦,那是不久前的事了……我经历了多种解决方案。我认为最后一个在检测每个接口后将一个接口添加到已实现接口的列表中。 (这个界面是空的,所以它什么也没做)。之后我只是检查了接口是否存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2012-11-10
  • 2014-11-14
  • 2017-03-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多