java - 访问限制类, 因为要限制对所需的库rt.jar ?

  显示原文与译文双语对照的内容

我试图编译 Java 1.4代码,它是由Java5在上创建的,但没有重新创建存根,在 Eclipse 中看到了这个错误。 我假设创建的存根应该只在运行时jar可用时编译。

Access restriction: The type QName is not accessible due to restriction on required library C:Program FilesJavajdk1.5.0_16jrelibrt.jar

完整的类名是 javax.xml.namespace.QName

这里到底发生了什么?

这是我试图从香肠中重构 Pig的一种情况? 我最好重新创建存根?

时间:

还有另一个解决方案。 我在上找到了这个论坛:

  1. 转到项目属性in中的构建路径设置。
  2. 删除 JRE系统库
  3. 添加回去,选择 "添加库"并选择 JRE系统库。 默认为我工作。

因为你在不同的jar文件中有多个类,这就奏效了。 删除和re-adding库将使正确的类成为第一个。 如果你想要一个基本的解决方案,确保你排除了具有相同类的jar文件。

对于我来说,我有三种不同的jar: axis-saaj-1.4.jarsaaj-api-1.3.jarrt.jar

  • 转到项目属性中的生成路径设置。 Windows -> Preferences -> Java Compiler
  • 删除JRE系统库
  • 添加另一个带有"完美匹配match的JRE"
  • 再次清理并生成项目。 在我这里工作正常。

我也得到了这个错误,但是我的项目是在 命令行 上构建的,使用 Maven 和 tycho 编译器( 这是一组OSGi插件) 。 经过大量的筛选人有同样的问题,但在 Eclipse 修复它,而不是 命令行, 我发现在第谷开发者论坛 消息,回答我的问题,使用配置 pom.xml 忽略编译器警告访问限制:


<plugin>
 <groupId>org.eclipse.tycho</groupId>
 <artifactId>tycho-compiler-plugin</artifactId>
 <version>${tycho.version}</version>
 <configuration>
 <compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
 </configuration>
</plugin>

更多信息可以在 Tycho常见问题列表中找到。 这个花了我的年龄,所以我想我将协助其他人试图解决这些访问限制从 命令行 发布这个答案错误。

如果你确定你应该能够访问给定类,比这可以意味着你添加到你的项目中包含几个jar( 或者径) 使用相同名称的类,但不同的内容和他们相互 overshadowing ( 通常一个古老习俗构建jar包含内置 3rd方库的旧版本) 。

例如当你添加一个实现:

 
a.b.c.d1
a.b.c.d2

 

但也有一个较老的版本:


a.b.c.d1
(d2 is missing altogether or has restricted access)

在代码编辑器中,一切工作正常,但在编译失败如果"旧的"图书馆overshadows新的d2突然发现"丢失或者无法访问"即使它就在那里。

解决方案是检查compile-time库的顺序,并确保具有正确实现的用户优先。

除了 Nels的解决方案之外,我还有以下技巧:

配置构建路径下,我不得不重新排列的顺序根据订单和出口条目。

另外,作为一个 Eclipse PDE开发人员,我需要重新安排 MANIFEST.MF 中依赖项的顺序,在列表中添加有问题的软件包。

玩这些刻度盘,随着运行项目> 清洁之间,我能够解决这些警告。

...