在 Eclipse 类路径中,组合访问规则是什么意思?

2022-09-01 06:57:40

这已经困扰了我很多年了,我想你们中的一个好人会知道 - 在Eclipse的.classpath文件中,classpathentry元素的combuliaccessrules属性实际上用于什么?

我可以在Java Build Path配置对话框中看到它可以纵,但我想不出一个好的用例。如果我对设置感到困惑,或者手动修改.classpath文件,它似乎没有任何效果。

我希望其他人已经很好地利用了它,我可以窃取他们的想法。基本上,这是我试图挠痒痒的。


答案 1

通过正确使用访问规则,您可以阻止使用“内部”和/或“非api”类和方法。将类或包添加为“禁止访问”或“已阻止”时,当您使用指定包中的类或类时,编译器将显示错误或警告。有关访问规则的更详细介绍,您应该阅读这篇短文

要使用组合访问规则,请考虑以下情况:

  • 您有 2 个项目,A 和 B。
  • 在项目 A 的类路径上,有一个导出的 jar 文件。该jar包含一些“稳定api”,“不稳定api”和“非api”公共类。
  • 项目 B 依赖于项目 A。

您不允许在项目 A 中使用“非 api”类,因此在这些类/包上设置了一些禁止访问规则。

在项目B中,您也不允许使用“非api”,但是您希望在使用“不稳定的api”时收到警告。在这种情况下,在项目 B 中,如果选中“将规则与导出的项目条目的访问规则合并”,则只需设置其他“不鼓励访问规则”。


答案 2

访问规则是方便的小东西,但很危险。它们从项目编译器中排除源文件,但使该文件在文件系统中保持不变。

我所处理的项目在我们的一个源文件夹中有一个引导类,但是如果我们包含整个文件夹,则项目类路径将无法编译(这是一个很长的故事,构建过程会处理这个问题)。

因此,我们使用 eclipse 访问规则来排除它,并且在开发过程中它永远不会打扰我们。这意味着我们不能轻易地更改代码,但它是多年来从未被触及的类之一。

从JavaDoc判断,Combine Access Rules是一个真正的边缘用例。要使用它,您必须拥有:

  • 一个项目的导出源条目中的访问规则
  • 从父项目到该项目的链接
  • 需要将子项目的访问规则与父项目相结合

我真的不能说它有什么用处,但我希望至少回答你的“它是什么”的问题:)


推荐