使用javac编译java时忽略未解析的符号
我使用谷歌插件在STS和。我决定以一种快速而肮脏的方式下载这个类,编译它并将其放入插件文件夹或jar文件中 课程在这里: 编译时,我当然会遇到一些错误:使用javac编译java时忽略未解析的符号,java,javac,Java,Javac,我使用谷歌插件在STS和。我决定以一种快速而肮脏的方式下载这个类,编译它并将其放入插件文件夹或jar文件中 课程在这里: 编译时,我当然会遇到一些错误: Java2HTMLEntityReader.java:19: error: package org.eclipse.jdt.internal.compiler.parser does not exist import org.eclipse.jdt.internal.compiler.parser.*; ^ Java2HTMLEntityRea
Java2HTMLEntityReader.java:19: error: package org.eclipse.jdt.internal.compiler.parser does not exist
import org.eclipse.jdt.internal.compiler.parser.*;
^
Java2HTMLEntityReader.java:28: error: cannot find symbol
public class Java2HTMLEntityReader extends SubstitutionTextReader {
^
symbol: class SubstitutionTextReader
Java2HTMLEntityReader.java:58: error: cannot find symbol
setSkipWhitespace(false);
^
symbol: method setSkipWhitespace(boolean)
location: class Java2HTMLEntityReader
Java2HTMLEntityReader.java:69: error: cannot find symbol
c = nextChar();
^
symbol: method nextChar()
location: class Java2HTMLEntityReader
Java2HTMLEntityReader.java:105: error: cannot find symbol
} else if (!ScannerHelper.isWhitespace((char) c)) {
^
symbol: variable ScannerHelper
location: class Java2HTMLEntityReader
Note: Java2HTMLEntityReader.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
5 errors
这是因为我没有给java编译器对包的引用。我也不打算!我想用这些错误编译它,我假设当我把它放在正确的类路径上时它会工作。成功的编译意味着源代码中应该没有错误
如果您的代码包含编译错误,它将无法编译并且不会生成
.class
文件如果您使用Eclipse编译器编译该类,您可以请求创建.class
文件,尽管存在编译错误。在命令行上,使用选项-proceedOnError
完成此操作。据我所知,javac没有这样的选项
请注意,API位置中未解析的类型(超类型、方法签名)可能会使生成的类文件变得无用
我真的看不出有什么好的理由去破解这样一个存根.class文件进行编译。如果在运行时有相应的jar文件可用,那么在编译过程中也应该使用相同的jar。不正确。您可以拥有带有未解析引用的
.class
文件。不要忘记java编译过程是对称的。如果您编译一个类,它的所有引用都应该存在于类路径上。另一方面,您可以使用复杂的引用机制,如maven
,在这里您可以为maven提供范围。创建字节码不需要引用。它们是否存在对产生的字节码没有影响。这可能是因为javac不允许您进行编译—但这当然是可能的,就像在没有这些引用的情况下可以对类进行反编译一样。这就是我的意思,javac结束时出现错误,因此不会生成包含jar的org.eclipse.jdt.internal.compiler.parser到javac类路径的.calss
文件,或者您只能使用替换TextReader.ClassCompiler如果不知道涉及的类型,编译器应该如何编译?@LutzHorn需要这些类型做什么?Java不支持内存,没有静态分配,所以不需要我们讨论的数据。毕竟,所有的数组列表都只是列表
,而实际的
在编译时并不重要。不要把Java误认为是在编译过程中实际执行某些操作的其他语言。但是您得到的错误不是关于列表的。它们是关于setSkipWhitespace
等方法的。他们从哪里来的?我一发现就试过了,但没用javac
ignored提供了jar类路径,并不断抱怨缺少类,尽管我能够在jar归档中找到这些类。不过我有eclipse,所以我会试试,也许它会奏效。@TomášZato,javac
忽略类路径上的JAR听起来像是配置/调用javac时的一个bug。