使用OSC Maven加速!确定了一个大问题,也请红薯确认!

    前几个月 @红薯 的 OSC Maven 中央库中可以发布自己的构件,我的一些 OSC 朋友也基于 OSC 这个平台发布自己的构建。

    首先非常感谢 @红薯 给大家提供的便利服务,但是我不得不劝阻大家还是选择放弃。虽然没有和红薯确认过,但是我想红薯自己应该意识到这个问题。

    下面这个构件是我在几个月前发布的,图中红色方框脏中标记的是我发布的构建:使用OSC Maven加速!确定了一个大问题,也请红薯确认!_第1张图片

    首先说明一下问题的严重性,我在 maven 中央库上曾经申请过“net.hasor”这个groupID,当时在测试OSC发布构建时特意为了避免可能存在的冲突更换了一个groupID发布hasor。而“net.hasor1”这个groupID目前在Maven 中央库上并没有被申请。

    也就是说某一天某个人或者是我,可以在Maven 中央库申请这个groupid作为新的构件空间发布项目,到那时如果那个人发布了同样的一个构建(如下),会和目前OSC这个构建引发冲突。

<dependency>
  <groupId>net.hasor1</groupId>
  <artifactId>hasor-core</artifactId>
  <version>0.0.1</version>
</dependency>

    这种冲突最大会引发的问题是,用户下载的构件并不是真正想要的构件。

    我们都知道,Maven 为项目设计了一套严禁的依赖关系,并通过 Maven 仓库管理这套依赖关系。如果依赖的构建信息不准确会对 Maven 的使用造成巨大的生态平衡破坏。

    Apache Maven 中央仓库在管理自己的 Maven 构件时严格要求,每个构件的依赖必须都是来自于 Maven 中央仓库中的构建。快照版本的构件只能发布到快照库,正式发布的构件中不允许出现依赖快照版本。

    这一切 Apache 通过(如下)pom 父配置来进行约束,不光如此。Maven 仓库中还为每个上传的构建启用了 GPG 校验以确保来源的可靠性。

<parent>
	<groupId>org.sonatype.oss</groupId>
	<artifactId>oss-parent</artifactId>
	<version>7</version>
</parent>

    经过这些保证,Maven 中央库才可以安全的向广大开发者提供 Maven 服务。并支持开发者向 Maven 中央库递交构件不会出现问题。

    目前 OSC 开启的构件上传可能会破坏这一环境,当然前提是您是在使用 OSC 提供的 Maven 库。

to @红薯 @廖凯

    我建议关闭这个页面(如下)

使用OSC Maven加速!确定了一个大问题,也请红薯确认!_第2张图片

    或者 红薯 先申请一个 osc 的 Maven 中央库 groupid,在让用户注册自己对应的 构件ID,从而规范 上传构件的使用。届时 OSC 可以向 Maven 中央库做构建推送(可能会是Maven 自动拉取构建)。

------------------------------------------------------------------------------------------

补充测试潜在是否存在可能的冲突,测试结果存在。

使用OSC Maven加速!确定了一个大问题,也请红薯确认!_第3张图片

同时请红薯帮忙删除,这两个构件,因为它们是错误的,我试图删除,但是没有权限:

<dependency>
  <groupId>net.hasor</groupId>
  <artifactId>abc</artifactId>
  <version>1.0.0</version>
</dependency>
<dependency>
  <groupId>net.hasor1</groupId>
  <artifactId>hasor-core</artifactId>
  <version>0.0.1</version>
  <classifier>jar</classifier>
</dependency>

--------------------------------------------------

    为了保证文章的完整性,我将 廖凯 关于OSC如何避免这一问题的办法从评论中摘抄出来奉上,这样以避免大家看到一个不完整的讨论结果。我个人觉得下面 廖凯 这段解释还是比较命中主题的,因此摘取这段文本。


proxy和hosted的索引是独立的,假如你搜索hasor-web,你在osc的maven里(正在浏览的镜像库)可以看到有三个镜像库,这些都是nexus后台配置的,这三个镜像库中都存在 hasor-web ,你可以从里面任何一个下载,如果maven中央库中存在,而且osc第三方库也存在,你搜索的时候,在这可以看到俩个。当然你可以选择使用那个,还有就是在maven客户端构件的时候,是按照nexus的配置依次请求的,很显然,中央库的配置是放在最前面,osc的第三方库最后面,如果前面在索引中都没有搜索到,最后才会到osc的第三方库中搜索,如果还是担心有问题,我完全可以将osc的第三方库从public移除。

    就是说有了nexus的配置顺序,其实 OSC 还是可以保证广大开发者在使用 Maven 时候不会出现用下载到错误包的。


    同时如果开发者发布的构件如果想被更多的 Maven 代理所知晓以及避免冲突的产生,其实最好的办法还是在 Maven 中央库上申请帐号直接发布到中央库为好。因为 OSC 的 Maven 库会自动同步中央仓库中的内容。


你可能感兴趣的:(maven,OSC,红薯)