创建密封Maven构建

Jak*_*ton 9 build-automation maven-plugin maven-3 maven

我正在尝试创建一种方法,可以在仍然依赖项目中的SNAPSHOT依赖项的同时实现密码构建.

出于举例的目的,假设我有一个具有如下依赖结构的项目:

             ? other-1.2-SNAPSHOT
mine-1.2.3 ???
             ? thing-3.1-SNAPSHOT ?? gizmo-6.1.3-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

我想要做的是将所有SNAPSHOT依赖项本地解析为与我当前版本相关的内容,然后将这些作为发行版部署到我的Nexus发布存储库.并非所有这些依赖都是内部的,所以我不能简单地在每个上发布.

所以,在这个例子中,other-1.2-SNAPSHOT会成为像other-1.2-mine-1.2.3thing-3.1-SNAPSHOT会成为thing-3.1-mine-1.2.3.这在大约60行python中相对微不足道.

然而,问题在于将传递SNAPSHOT解析为具体版本.所以我还需要转换gizmo-6.1.3-SNAPSHOTgizmo-6.1.3-mine.1.2.3thing-3.1-mine-1.2.3依赖于它.

这只是实现我想要的一种方式的一个例子.目标是在未来一两年内,我可以检查我的版本1.2.3的发布分支,并能够运行mvn clean package等,而不必担心解决长期以来的SNAPSHOT依赖关系.

重要的是,这个分支是可编译的,而不仅仅是使用jar-and-dependencies程序集插件的功能来保留所有依赖项.我希望能够修改源文件并进行另一个版本构建(例如,应用修补程序).

所以,

  • 有没有这样的东西可以以递归的方式转换SNAPSHOT依赖项具体?
  • 是否有任何插件可以为您管理此类事情?发布插件在其branch目标上有一些配置选项的承诺,但它没有解决我想要的程度的外部deps.
  • 是否有其他技术可用于创建密封Maven构建?

noa*_*hlz 2

这不是一种广泛使用的技术,但您始终可以将特定的 SNAPSHOT 依赖项作为“项目”存储库检查到项目中,如本博客文章中所述:Maven 之于 Ant,就像钉枪之于锤子一样

简而言之,使用依赖项插件创建位于项目目录中的存储库。以下内容是从链接的博客文章复制的(您应该阅读):

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

“这将使用所有项目依赖项的类似存储库的布局创建 /target/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>
Run Code Online (Sandbox Code Playgroud)

您可以将此作为构建/发布过程的自动化部分:步骤 1 通过将依赖项插件配置到生命周期阶段,步骤 2 使用 AntRun 插件将下载的依赖项移动到正确的位置。

希望这对你有用。我现在得去洗澡了...