【发布时间】:2012-05-18 12:11:26
【问题描述】:
这是场景:
两个 Maven 3 项目构建。
Build 1 具有可部署到 Nexus 的快照 jar。
Build 2 依赖于快照,引用如 1.0.0-SNAPSHOT,使用 mvn clean package assembly:single 命令打包和压缩。
我们遇到的问题: 有时,在创建程序集时,jar 的 MANIFEST 文件有时会显示 some.jar.1.0.0-SNAPSHOT,有时会显示 some.jar.1.0.0-datetime戳,从而导致类未定义错误。
有没有办法防止清单文件中出现这种命名问题?
--编辑--
进一步研究发现:
"如果快照是从 repo 中解析的,那么它将被加上时间戳, 如果它来自反应堆或本地仓库,那么它将是-SNAPSHOT。 插件调用 maven 解析逻辑,所以这是核心 maven 行为。 "
这是正在遇到的确切问题。第二个构建清单文件总是有一个 ./lib/Framework-1.0.0-SNAPSHOT.jar 条目,其中实际的 jar 文件名在 ./lib/Framework-1.0 之间发生变化。 0-SNAPSHOT.jar 和 ./lib/Framework-1.0.0-timestamp.jar 基于上面的引用。
【问题讨论】:
-
This 可能会有所帮助,它描述了设置 outputfilenamemapping 以使文件名在快照中保持一致。
-
SNAPSHOT 的清单是如何生成的,它是如何配置来生成此信息的?此外,为什么要调用 mvn clean package assembly:single 而不是简单地调用 mvn clean package 因为 package 会调用配置的 assembly-plugin。
-
快照本身没有清单。有问题的清单在第二个版本中。在一位同事的帮助下,我们发现了这个
If the snapshot was resolved from a repo then it will be timestamped, if it came from the reactor or local repo, then it will be -SNAPSHOT. The plugin calls into the maven resolution logic so this is core maven behavior.这正是我遇到的问题,我只需要解决这个问题。至于为什么调用 package assembly:single,那是因为我们对 maven 整体来说是新手。
标签: maven nexus snapshot maven-assembly-plugin