使用 JDK 1.8 java 编译:无法访问 class 文件... class 未找到文件
Compiling with JDK 1.8 java: cannot access class file... class file not found
虽然相同的代码在 JDK 1.6 版本中编译成功,但在升级到 JDK 1.8 后它无法编译,说 java cannot access ....class file ...as class file not found though it exists
。
我正在 IntelliJ Idea 13 IDE 中编译它,同时尝试使用重建选项和配置的 ANT 构建 - 结果相同。
非常感谢任何帮助。
cannot access IDispatchRequest
class file for com.abc.xyz.orchestrator.dispatch.IDispatchRequest not found
1 error
Compile failed; see the compiler error output for details.
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1079)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:882)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.Main.start(Main.java:179)
at org.apache.tools.ant.Main.main(Main.java:268)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)
此问题现已解决:)。它基本上与 class 路径设置有关,仅适用于 JDK 1.8。
例如:如果 class 'A' 引用了 class B 并且 class B 正在实现一个接口 say 'C' 那么 javac in JDK 1.8 在 class 路径上同时需要 class B 和接口 C,而在 1.8 之前,在 class 路径上只有 class B 就足够了。
我在执行一个返回 class 的函数时遇到了这个问题,而我在 class 路径中没有,但我只是想访问他的内部字段。
例如:
container.getContent().getField()
我必须导入内容 class 才能使其正常工作。
你可以使用gradle来解决这个问题。
添加"transitive = true"到依赖项。就像这样:
compile('com.***.android:***sdk:1.0.2.6@aar') {
transitive = true
}
构建 -> 重建项目对我有用
对我来说,这意味着我下载了一个我认为已损坏的 jar。 Nuke ~/.m2/repository 然后重试...
对我来说,无法访问的 class 位于外部 JAR 中。
该场景适合此处接受的答案。
我通过将 JAR 作为依赖项添加到引发错误的模块来解决我的问题。
这意味着如果错误是从 class A 抛出的,并且未访问 class C,我将包含 class C 的 JAR 作为依赖项添加到包含 pom.xml 的模块中15=] A.
虽然相同的代码在 JDK 1.6 版本中编译成功,但在升级到 JDK 1.8 后它无法编译,说 java cannot access ....class file ...as class file not found though it exists
。
我正在 IntelliJ Idea 13 IDE 中编译它,同时尝试使用重建选项和配置的 ANT 构建 - 结果相同。
非常感谢任何帮助。
cannot access IDispatchRequest
class file for com.abc.xyz.orchestrator.dispatch.IDispatchRequest not found
1 error
Compile failed; see the compiler error output for details.
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1079)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:882)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.Main.start(Main.java:179)
at org.apache.tools.ant.Main.main(Main.java:268)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)
此问题现已解决:)。它基本上与 class 路径设置有关,仅适用于 JDK 1.8。
例如:如果 class 'A' 引用了 class B 并且 class B 正在实现一个接口 say 'C' 那么 javac in JDK 1.8 在 class 路径上同时需要 class B 和接口 C,而在 1.8 之前,在 class 路径上只有 class B 就足够了。
我在执行一个返回 class 的函数时遇到了这个问题,而我在 class 路径中没有,但我只是想访问他的内部字段。
例如:
container.getContent().getField()
我必须导入内容 class 才能使其正常工作。
你可以使用gradle来解决这个问题。
添加"transitive = true"到依赖项。就像这样:
compile('com.***.android:***sdk:1.0.2.6@aar') {
transitive = true
}
构建 -> 重建项目对我有用
对我来说,这意味着我下载了一个我认为已损坏的 jar。 Nuke ~/.m2/repository 然后重试...
对我来说,无法访问的 class 位于外部 JAR 中。 该场景适合此处接受的答案。
我通过将 JAR 作为依赖项添加到引发错误的模块来解决我的问题。 这意味着如果错误是从 class A 抛出的,并且未访问 class C,我将包含 class C 的 JAR 作为依赖项添加到包含 pom.xml 的模块中15=] A.