以m2eclipse友好的方式跨多个项目共享过滤的资源

时间:2012-08-14 11:17:15

标签: eclipse maven jar m2eclipse m2e

简短版:

寻找建议以某种方式将包含常见版权信息,项目名称,版本,inceptionYear和currentYear的已过滤资源文件分发到多个项目,使用从Eclipse使用m2e插件时不会出错的内容。

说明

现在,我们有一个项目buildInfo,其中包含一个属性文件,其中包含$ {project .name},$ {project.version},$ {inceptionYear},$ {currentYear}等内容。

我们有一个parent.pom执行以下操作:

  • 使用build-helper-maven-plugin定义currentYear属性:timestamp-property goal
  • 使用依赖项:unpack goal将buildInfo属性文件解压缩到$ {project.build.directory} / buildInfo / $ {project.artifactId}。
  • 使用资源复制并过滤属性文件到目标/类:copy-resources goal。

从parent.pom继承的所有项目现在都获得了property-file的副本,该副本使用该项目的特定名称,版本和初始年份进行过滤。

然后在每个项目中使用它在项目初始化时将版权声明转储到日志中。具体来说,该项目知道其属性文件位于以项目命名的子文件夹中。

为什么:

要删除需要转储版权和版本信息的每个项目中的属性文件的重复,我们已将属性文件放在其自己的项目中。

我们找不到任何其他方法来查找正确的属性文件,而不是将其放在每个项目的唯一命名文件夹中。

我们使用大量这些项目构建应用程序(重新),这意味着我们需要在许多不同的jar文件中找到这些信息,因此属性文件的名称/路径必须是唯一的。

问题:

Eclipse m2e-plugin不喜欢依赖:unpack和build-helper-maven-plugin:timestamp-property目标。

当使用m2e-plugin将项目签出为maven项目时,它会将从parent.pom继承的pom文件标记为有错误。

  • 我们将两个目标的执行移至了包阶段,这应该是m2e非有趣的阶段,但仍然会出错(参见:https://docs.sonatype.org/display/M2ECLIPSE/Project+build+lifecycle+mapping)。
  • 我们添加了带有配置的生命周期映射插件,以忽略时间戳属性目标,但它在结账时仍然会出错,然后在结账后消失。
  • 我们还添加了配置以忽略解包目标。

通过所有三项更改,它似乎有效。不幸的是,当从Eclipse运行项目时,我们不再拥有属性文件......

问题:

所有这一切都是为了消除重复并避免为每个版本提交文件更改,

令人讨厌的是,我们的解决方案仍然要求我们知道应用程序包含哪些项目,以便从每个jar中读取信息并显示在“关于”框中。

问题:

您如何建议将常用信息添加到应用程序中使用的多个项目中,并能够查找每个jar文件?

并且,可以用m2e友好的方式完成maven吗?

期待建议,
/亨里克

1 个答案:

答案 0 :(得分:1)

我已将myven远程资源插件用于类似目的,如another SO answer中所述。我仍然需要在我的POM中添加m2e生命周期映射内容,我使用了<execute>操作。在mvn命令行和Eclipse中运行良好。

我遇到的唯一问题是,如果我编辑它,Eclipse有时会对资源文件进行某种锁定;然后,以下mvn clean报告“无法删除文件,因为它正在使用中”。在Eclipse中的资源项目上运行“更新项目配置”可以解决该问题。我接受这个痛点,因为至少我可以避免重复,而且我不倾向于经常编辑共享资源。 (我也希望最新的Eclipse,我还没有升级,会有所帮助!)