【问题标题】:Cause of this error: The type Test is not accessible due to restriction on required library?此错误的原因:由于所需库的限制,无法访问类型 Test?
【发布时间】:2014-05-20 07:14:12
【问题描述】:
**Description** 

Access restriction: The type Test is not accessible due to restriction on required library 

**Resource**

/Applications/Eclipse Java/plugins/org.junit_4.11.0.v201303080030/junit.jar 

**Path**

AdditionTest2.java  

**Location**

/Practice/src/testing   line 5  

**Type**

Java Problem

我已经看到了这些其他 SO 线程的答案:

Access restriction on class due to restriction on required library

Access restriction on class due to restriction on required library rt.jar?

并且我已经应用了修复 - 构建路径 -> 删除系统库 -> 重新添加它,它可以工作。但是,我还有两个问题:

1.为什么代码仍然以红色突出显示?

顺便说一句,代码如下

package testing;

import static org.junit.Assert.*;

import org.junit.Test;

public class AdditionTest2 {
    // @Test is underlined red
@Test
public void testAddition() {
    Addition add = new Addition();
    int[] numbers = {1, 2};

            // this line is underlined red
    assertEquals("1 + 2 must be 3", 3, Addition.add(numbers));
}

}

2.是什么导致了这个错误?同样,我已经阅读了这两个主题,但我仍然不明白。

谢谢!

巴乔

编辑:实际上,我的立场是正确的——它不起作用。我对 eclipse 中的测试不太熟悉,但是在 JUnit 选项卡下,什么也没有发生。

编辑 2:构建路径图像(如果有帮助)

EDIT 3:为 JUnit 3 和 JUnit 4 构建路径映像

EDIT 4 + 解决方案:实际上,使用 JUnit 4 的测试代码根本没有运行 - 当我单击 Run --> Run As it didn't run - 我试图删除 JUnit 3来自构建路径,它现在可以工作了!除了现在我还有另一个问题是不知道为什么测试失败,但这是另一个问题。

【问题讨论】:

  • JUnit 的构建路径条目是什么样的?查看.classpath 并将该行附加到您的问题中。
  • 您在“控制台”视图中看到了什么吗?
  • @AaronDigulla 抱歉,我对构建路径等不太熟悉 - 你的意思是项目 --> 属性 --> Java 构建路径吗?如果是这样,我已经在上面发布了。抱歉,我使用的是 Mac,如何显示 .classpath?
  • @blazonix:关闭 :-) 我们对“JUnit 3”下的内容更感兴趣。

标签: java eclipse


【解决方案1】:

Eclipse 基于 OSGi。 OSGi 有一个“是的,你可以看到这个类但你最好不要使用它”的概念。它是private 类的扩展。

一般的想法是来自某人的代码包含公共 API,并且它包含公共类,因为 Java 编译器需要它,但它们不是公共 API 的一部分。

示例是 Java 运行时中的类,它们位于 com.sun 包中。由于只有 Oracle 的 Java 版本包含它们,因此使用它们对您不利。这就是 Eclipse 开发人员在他们的编译器中添加检查的原因。

在您的情况下,错误消息似乎很奇怪。 junit.jar 不包含私有 API。我的猜测是您以某种方式拉入了错误的 JUnit JAR(即 Eclipse 认为是私有的并且只能由 IDE 访问的)。

尝试使用Built Path--> Add Libraries 将“JUnit”添加到您的项目中,而不是手动添加 JAR。

[编辑] 如果您使用Built Path--> Add Libraries 添加 JUnit JAR,则不应发生此错误。事实上,它首先不应该是错误 - 访问限制是警告。

尝试将您的编译器选项重置为默认值,然后重试。

【讨论】:

  • @AaronDiguilla - 实际上,我尝试过(删除 JUnit 3 然后将其重新添加,删除 JUnit 3 并添加 JUnit 4),但没有成功。
  • 对我来说没有意义的事情:您说您使用 JUnit 3,但上面的错误消息显示 org.junit_4.11.0。你混淆了事实吗?
  • @AaronDiguilla 我假设您的意思是:首选项 -> Java -> 编译器 -> 错误/警告 -> 已弃用和限制的 API -> 禁止引用(访问规则):-> 更改为警告。这会将消息更改为警告,但问题是警告本身并没有消失。
  • @AaronDiguilla 哦不,上面的类使用的是 JUnit 4,但我之前也使用过 JUnit 3,所以两个库都包含在内。
  • 好的,现在我很担心。当您查看图像时,您可以看到当您选择 JUnit 3 时,Eclipse 将 junit.jarorg.junit_4.11.0 添加到您的构建中。这是全新安装吗?
【解决方案2】:

我遇到了同样的问题,可以通过从我所有交互插件项目中的 manifest.mf 文件(使用依赖项选项卡)中删除 junit 来解决它,然后使用替代方法添加 junit
构建路径 ...-> 添加库 ...-> JUnit 正如 Aaron 在上一篇文章中已经描述的那样。

【讨论】:

    【解决方案3】:

    我遇到了一个非常相似的问题,我可以通过更新我的 Eclipse 项目的类路径文件中指向旧版本 JUnit 的条目来解决它。

    我变了

    <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
    

    <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    

    【讨论】:

      【解决方案4】:

      这可能很明显,但如果您使用的是 spring 框架,请确保将 spring 库也添加到构建路径中。

      下载spring-framework-4.1.6.RELEASE-dist.zip等spring库 - 解压到笔记本电脑的文件夹 - C:\springLib\

      然后在构建路径中添加一个User Library并指向这个lib

      【讨论】:

        猜你喜欢
        • 2015-10-13
        • 2010-12-03
        • 2012-03-05
        • 2010-11-08
        • 2010-10-26
        相关资源
        最近更新 更多