处理工件更改groupID和传递依赖性风险

时间:2014-11-28 15:02:00

标签: java maven classpath nexus

当由于某种原因Maven工件更改groupId并且开发人员没有相应地更新包名时,可能会出现类路径冲突。让我们想象一下如下的构建:

  • artifact2
    • 取决于com.bla v2并使用类xyz.MyClass
  • artifact1
    • 取决于org.bla v1并使用类xyz.MyClass

当我们使用完整的类路径运行“main”时,可能会在首次加载artifact1使用xyz.MyClass的类时,从com.bla解析xyz.MyClass而不是org.bla

用于应用程序生命周期管理的Nexus Sonatype或其他工具是否有助于识别此问题,例如,在推广构建版本之前?

2 个答案:

答案 0 :(得分:1)

您可以使用Maven Enforcer plugin,使用"禁止复制类"来自Extra Enforcer Rules的规则。

所以这将是一个POM级别的修复,应该会影响从该POM构建的任何内容。如果找到重复的类,您的项目将无法构建。

答案 1 :(得分:1)

Sonatype Nexus Professional CLM Edition可以根据GAV坐标定义策略,然后在发布版本中强制执行。一旦您意识到这些变化,就必须自己手动定义它们。没有自动检测。

政策可以使用您可以定义的许多不同规则,例如不允许某些GAV坐标,不允许具有特定年龄的工件,具有严重性的已知安全漏洞的工件> 5不允许等等。

使用Sonatype CLM,您还可以在Eclipse,Hudons,Jenkins,Bamboo,Sonarqube和命令行工具中强制执行和报告这些策略。

与Duncan一样,您也可以使用Enforcer插件。如果您这样做,我建议将调用移到单独的配置文件中,因为较大的检查会对构建性能产生很大影响。要在整个组织中使用它,您可以在组织的父pom中配置它。