【发布时间】:2012-05-29 21:22:04
【问题描述】:
我正在将我的构建从 Ant 迁移到 Maven。 Ant build 用于编译一个“代码生成器”,执行这个“代码生成器”,生成一组 Java 和 C 代码。然后它获取生成的 Java 代码并将其与一些附加代码一起编译生成一个 jar。
我在 Maven 中很容易地复制了这个,当我从命令行运行时它运行良好,但 Eclipse 抱怨并给我一个与 pom 文件相关的错误
未能找到 {group.id}:{artifact.id}:pom:1.0.0-SNAPSHOT http://{我们的内部站点存储库}/nexus/content/groups/public 是 缓存在本地仓库中,不会重新尝试解析 直到快照的更新间隔已经过去或更新 强制
group.id 和 artifact.id 是我的代码生成器插件的组和工件 ID
并且任何引用生成代码的代码也无法编译。
我的 Maven 构建包括
仅包含代码生成器的 Java 代码的生成器项目。
一个生成器插件项目,其中仅包含将生成器包装为 Maven 插件的代码。这取决于生成器项目。
使用插件生成代码的 xyz 项目。代码最终位于该项目的 target/generated-sources/xxx 文件夹中。我已经按照Maven compile with multiple src directories 配置了 build-helper-maven-plugin 以包含这个额外的源目录。
如果我手动将生成的源文件夹添加到 Eclipse 构建路径,则与代码不存在相关的所有错误都会在该项目上消失,但不会在任何下游项目上消失,并且会列出“找不到...”错误以上遗骸。
让我有点困惑的是,它指的是 ...:pom:1.0.0-SNAPSHOT,而实际上我的生成器插件被定义为 maven-plugin。
这是一个明智的做法吗?
为什么我会收到“未能找到...”错误?
为什么 Eclipse 不提取我的生成源文件夹?
我还应该说我的 Eclipse IDE 中安装了 m2e 插件和用于 build-help-maven-plugin 的 m2e 连接器。
【问题讨论】:
-
您是否有一个多模块结构,将您的插件、生成器代码等包含在一个结构中,或者您是否有单独的项目?
-
它是一个扁平的多模块结构。每个模块都作为单独的项目导入 Eclipse。
-
冒着说明明显的风险,如果它从命令行运行良好(并且您正在从 eclipse 正在查看的同一目录运行终端命令),那么您的问题在于 eclipse 或 eclipse插入。但是,听起来你的 Eclipse 设置要么误解了你的生成器插件是什么,要么误解了去哪里寻找它(你的 repo 上是否有版本为 1.0.0-SNAPSHOT 的 pom,或者只是一个 jar?)它应该是无论如何,首先在本地寻找它,所以理论上它应该在你的 repo 中找到它 - 但是,如果它正在寻找一个 pom 并找到一个 jar 它会出错。
-
Eclipse 需要一个 m2e 连接器或它使用的任何 Maven 插件的生命周期映射。由于您可能还没有为您的自定义插件编写连接器,请考虑在您的 POM 中定义一个 mapping。
-
我认为这可能是因为我确实有一个生命周期映射,但我将它作为一个 xml 文件包含在我的生成器插件中。我以为我有支持此功能的 m2e 版本,因为我下载了我认为是最新的版本。相反,我不得不将生命周期映射放在使用生成器插件的项目的 pom 文件中。这似乎有效。
标签: eclipse maven m2eclipse m2e