生成的代码未编译

时间:2018-07-22 03:08:18

标签: maven maven-3

我写了一个Mojo,它创建了一个新的Java类并将其放在/target/generated-sources/annotations中。另外,我已经配置build-helper-maven-plugin将该文件夹声明为源文件夹。

问题是当我这样做时:mvn clean install从CLI生成了源文件,但没有编译它。

请注意,如果我从Eclipse中运行Maven Install(使用m2e连接器),则可以正常工作。

我想念什么?

1 个答案:

答案 0 :(得分:0)

没有实际的插件定义,我们只能推测。

我无法评论m2e,我看到您自己陈述的一个明显区别: mvn全新安装 mvn安装,但来自“裸机”专家立场,

这是一个可能的原因:

Maven具有构成生命周期的阶段的概念。 here

提供了有关默认生命周期阶段的信息。

插件(更确切地说是插件的“目标”)通常会附加到特定阶段。

例如,Maven编译器插件已附加到编译阶段。

因此,也许您开发的插件比编译器插件要运行稍后。 通常,源代码生成插件会附加到 generate-resources 阶段。

有可能在maven中运行完整的生命周期,实际上,这是人们通常所做的事情,例如,运行 mvn测试实际上意味着在默认生命周期的所有阶段运行直至(包括)阶段测试

但是也可以直接运行特定的插件目标,而无需将其附加到阶段。当然,在这种情况下,应满足其先决条件。

例如, mvn surefire:test 意味着我们应该直接调用surefire插件。当然,源代码和测试代码应该事先编译(字节码必须存在于 target 目录中)

因此,我建议您运行以下一系列命令(如果有测试,请进行调整):

  1. 在插件项目上运行 mvn全新安装 ,将其放置到本地m2存储库中
  2. 直接运行插件: mvn ::: 并检查 源是否在目标文件夹中生成
  3. 确保在项目的pom.xml中正确配置了源文件夹
  4. 即使没有插件也可以在pom上运行 mvn编译(逐步进行,包括编译) 在此阶段之后, target 目录中将有已编译的源。不要跑 干净,因为它将清除所有目标目录

这将有效地帮助确保插件正确完成工作