创建全封闭的Maven构建(Creating Hermetic Maven Builds)

2019-08-01 15:27发布

我试图创造一种同时仍然依靠快照依赖项目中的密封建立可以实现的一种方式。

例如而言,说我有具有依赖结构这样一个项目:

             ┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
             └ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT

我想这样做是在本地解决所有快照依赖的东西这是关系到我的当前版本,然后部署这些都排放到我的Nexus' release系统信息库。 并非所有这些依赖的是内部的,所以我不能只是简单地让每一个版本。

所以,在这个例子中, other-1.2-SNAPSHOT会成为像other-1.2-mine-1.2.3thing-3.1-SNAPSHOT将成为thing-3.1-mine-1.2.3 。 这是在约60蟒线比较琐碎。

但问题是在解决传递快照具体版本。 所以我还需要转换gizmo-6.1.3-SNAPSHOTgizmo-6.1.3-mine.1.2.3并有thing-3.1-mine-1.2.3依赖于它。

这只是在实现我想要的一种方式的示例。 我们的目标是,在一两年内的道路,我可以签我的发布分支1.2.3版本能够运行mvn clean package ,而不必担心解决长期以来,走了快照依赖等。

这个分支被编译并不仅仅是保留使用类似的所有依存关系是很重要的jar-and-dependencies Assembly插件的功能。 我想可能能够修改的源文件,使另一个发布版本(例如,应用修补程序)。

所以,

  • 有没有这样的可用,将能够快照依赖转换以递归的方式是具体什么?
  • 是否有其管理这种事情你任何插件? 发布插件必须在其一些配置选项的承诺branch的目标,但它不能解决外部DEPS到我想要的程度。
  • 其他技术可用于创建密封的Maven构建?

Answer 1:

这不是一个广泛使用的技术,但可以随时查询您的具体快照依赖到您的项目作为一个“项目”资料库,在这个博客帖子描述: Maven是Ant的钉子枪是一个锤

总之,使用依赖插件创建位于项目目录库。 下面从链接的博客文章(你应该读)复制:

1)运行mvn -Dmdep.useRepositoryLayout=true -Dmdep.copyPom=true dependency:copy-dependencies

“这将创建/你的所有项目的依赖关系的回购式布局目标/依赖”

2)复制target/dependencies/于像libs/

3)添加库声明类似下面的POM:

<repositories>
  <repository>
    <releases />
    <id>snapshots-I-need-forever</id>
    <name>snapshots-I-need-forever</name>
    <url>file:///${basedir}/libs</url>
  </repository>
</repositories>

你让你这个构建/发布过程的自动化部分:第1步通过配置依赖插件生命周期phasephase,和步骤2用AntRun插件的下载依赖移动到正确的地方..

希望这对你的作品。 我得去洗澡了,现在...



Answer 2:

Maven的版本插件会做你最想要的东西。

http://mojo.codehaus.org/versions-maven-plugin/

然而,你将几乎certianly需要在您解决所有的依赖关系,并相应地更新POM文件的生成前阶段运行。 然后重新运行Maven(这将重新读取POM)来运行真正的构建。 你也许可以配置POM本身有这样一个单独的目标,避免了单独的脚本触发内的一切。

如果你使用特定版本,而不是快照依赖,让如有必要,预生成一步升级他们这工作得更好。 为解决依赖唯一的区别是,Maven将始终重新下载-SNAPSHOT的依赖,而它只会下载正常的依赖关系,如果有可用的新版本。 然而,许多插件(包括版本插件)治疗-SNAPSHOT依赖性不同造成的问题。 由于每个CI搭建了一个新的版本号我从来没有使用-SNAPSHOT,prefering像-DEV不同的标签更可预测的行为对于像开发本地编译等

我花了很多时间让行家做的事情与此类似。 大多数Maven项目我知道有某种预构建的步骤,以设定版本号或周围像这样的其他限制得到。 尝试做这一切在一个步骤通常会失败,因为行家只读取POM一次,字符串替换不会在几个地方工作,并部署/安装的POM不一般不包含字符串substituion或变更所取得的成果在生成过程中。



文章来源: Creating Hermetic Maven Builds