使用没有 pom 文件的 Maven 仓库

Use a maven repo which does not have pom files

我们有一个大型自定义工件存储库,供我们旧的内部 ant 构建使用。

它存储 jar 的方式与 Maven 存储库的方式大致相同。即

http://repo/root/<group>/<artifact>/<version>/<artifact>-<version>.jar

但是,这个存储库 does_not_ 包含 pom 文件。只有 jars 和 src jars。

我们现在正在将大量项目迁移到使用 maven/gradle,这些项目使用我们拥有的 Artifactory 安装。但是项目仍然对存储在旧存储库中的工件有很多依赖性。

我想知道是否有人知道使用 maven/gradle 访问这个旧式存储库(没有 poms)的方法?

我们可以 合成并插入大量简单的 pom,它们只有 group/artifact/version 等,没有依赖项。但想知道是否有更简单的方法。

毕竟,group/artifact/version 在路径本身中。 poms 从不包含依赖项,因此在这种情况下,poms 不会(据我所知)提供任何附加信息。

任何 advice/help 将不胜感激。

当您将项目转换为 Maven 时,您需要接触依赖项定义。您需要用 Maven 坐标替换旧的基于文件的访问。

因此,我建议如下(我们做了非常相似的事情,只是使用 Windows 网络驱动器而不是基于 http 的存储库):

  • 编写一个脚本,将您的所有工件从旧存储库上传到您的工件。如果您使用 maven deploy:deploy-file,Maven 将为您创建存根 poms。

  • 为开发人员编写脚本,通过 pom 的相应 Maven 坐标转换旧存储库上的引用。

附带说明:在我们公司,旧 "repository" 和 Maven 存储库同时被积极使用(和写入),因此我们在 Nexus 之间开发了双向同步作业和旧的 "repository".

Gradle 不需要 pom 文件,如果它们不可用,它应该直接引用 jars。所以这应该"just work"

repositories {
    maven {
        url "http://repo/root"
    }
}

如果由于某种原因存在细微差异,您可以使用 Ivy 存储库。参见 custom ivy repositories and IvyArtifactRepository 例如:

repositories {
    ivy {
        url "http://repo/root" 
        layout "pattern", {
            artifact "[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier])(.[ext])" 
        }
    }
}