2013-07-25 36 views
6

任何帮助或指针都会非常感谢。 我需要在构建时将两个字段注入到项目的所有依赖项JAR的清单文件中。Maven:修改依赖关系JAR的清单文件

依赖关系jar已经构建并从回购中被取消。 我需要找到一种方法来获取JAR的Manifest文件,然后使用当前的pom文件中的变量对其进行修改。 有没有人知道如何做到这一点。 在此先感谢您的时间和回复

+6

为什么你想这样做,导致这些工件已经建成,换句话说就是不可变的。您可以通过maven-dependency-plugin和maven-assembly-plugin的组合来更改这些工件,但它会产生一个非常大的pom文件。另一方面,你正在改变已经构建的工件,这将违背Maven的想法。 – khmarbaise

+0

@Wimpie你找到解决方案吗? –

+0

'maven-assembly-plugin'允许你指定清单配置,但是目前有一个[bug](http://jira.codehaus.org/browse/MASSEMBLY-450),它阻止合并现有清单附加清单条目。我发现这是因为我试图做同样的事情并失败。 – user944849

回答

0

这实际上并不是Maven允许您执行的操作。从Maven的角度来看,每个具有特定名称的JAR应该与其他具有相同名称的JAR完全相同。

例如,假设我的项目取决于abc-1.0.jar。我指定了这种依赖关系,因为ALphabet团队发布了一个abc库,其中包含1.0版本的指定API。我应该可以从世界上任何一个仓库获取这个jar文件,甚至当我的互联网出去并将其手动安装到我的本地存储库时,从街上的邻居那里得到这个jar文件,它应该是完全相同的文件。如果它不是相同的文件,那么我就不能保证jar文件中的.class文件将包含我需要的库代码,以使我的构建成功而没有错误。

如果你是真的有动机做这项工作,那么,这在理论上是可能的。您可以编写一个脚本,将:

  1. 解析POM XML的properties部分和解析从那里出来的各个属性,以及依赖罐子的名字
  2. 对于分类每个依赖罐子“ manifest_injected“,尝试在本地存储库中找到它。如果它不存在,则生成一个具有给定依赖项的空Maven项目(没有manifest_injected分类器),对其运行mvn validate以确保依赖项已被下载并放置在本地存储库中(如果已发现)
  3. 克隆所有的JAR文件,打开克隆,使用你之前解析过的属性进行清单注入,并将注入的jar保存到Maven仓库中的适当位置。
  4. 调用传递给脚本的Maven构建一个论点。

祝你好运!

0

您可以在二进制存储库中轻松完成。例如,Artifactory允许您编写a user plugin that will be triggered on any download。在这个监听器中,您可以编写自己的代码 - 打开jar文件,更改清单文件并提供更改后的jar而不是原始文件(并在下次缓存它)。