1

精简版:

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

描述:

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

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

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

从 parent.pom 继承的所有项目现在都会获得属性文件的副本,该文件使用该项目的特定名称、版本和开始年份进行过滤。

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

为什么:

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

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

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

问题:

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

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

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

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

问题:

所有这些都是为了消除重复并避免需要为每个版本提交文件更改。

烦人的是,我们的解决方案仍然要求我们知道应用程序包含哪些项目,以便从每个 jar 中读取信息并显示在 About-box 中。

问题:

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

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

期待建议,
/Henrik

4

1 回答 1

1

另一个 SO answer中所述,我已将 maven 远程资源插件用于类似目的。我仍然必须在我的 POM 中添加 m2e 生命周期映射的东西,我使用了这个<execute>动作。在mvn命令行和 Eclipse 中运行良好。

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

于 2012-08-14T13:00:46.453 回答