【问题标题】:disallow import of some transitive maven dependencies禁止导入一些可传递的 Maven 依赖项
【发布时间】:2016-09-14 22:09:51
【问题描述】:

使用 maven,我们可以排除一些传递依赖。

但如果我们在运行时需要它们,但作为架构师,我不希望它们被使用并成为 API 依赖项。

是否有工具来定义和检查不需要的使用依赖项(即在某些 Java 类中导入)?

这里的搜索给了我关于 maven 的提示 In maven, can you disallow usage of transitive dependency in your code but still keep it in the classpath?

但这可能很难定义。也许应该使用IDE工具?

如何禁止导入和使用某些可传递的 maven 依赖项? 这样代码就不会访问我们堆栈的不同层。
是的,我知道一些教育工作也应该进行。

【问题讨论】:

标签: java eclipse maven ide dependencies


【解决方案1】:

在处理 maven 时,有一个依赖范围的概念。通常对于 Java EE 应用程序,您会看到 3 个作用域被利用得最多:

编译 - 如果没有指定,这是使用的默认范围。这些将在项目的所有类路径中可用。

提供 - 当编译不需要依赖项时使用此范围,但预计在运行时在容器中。

Test - 这是测试所需的依赖项,但不是应用程序正常使用所必需的

根据您的用例,我相信您希望将提供的范围用于在运行时需要依赖项的依赖项,但在编译期间不应该对应用程序可用。您可以在以下位置阅读有关依赖范围的更多信息:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

【讨论】:

  • 这不会阻止任何人使用不应使用的实现模块中的类。在这种情况下,应该使用 API 模块中的类......
  • 解决这种情况的一种方法是将规范/API 与实现分开打包。只有实现在运行时可用。有几个框架可以让你做到这一点。比如 OSGI。
猜你喜欢
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多