35

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

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

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

4

3 回答 3

27

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

对于使用组合访问规则,请想象以下情况:

  • 您有 2 个项目,A 和 B。
  • 在项目 A 的类路径上有一个导出的 jar 文件。jar 包含一些“stable api”、“unstable api”和“non-api”公共类。
  • 项目 B 依赖于项目 A。

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

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

于 2009-06-23T13:03:18.993 回答
3

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

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

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

从 JavaDoc 来看,Combine Access Rules 是一个真正的边缘用例。要使用它,您必须具备:

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

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

于 2009-06-23T12:44:21.763 回答
1

虽然我自己从未使用过它,但可以在这里找到一点点。

项目导出条目的访问规则是否与本条目的访问规则结合

访问规则类似于包括“com/tests/**”

于 2009-06-23T12:14:18.483 回答