使用 javac 编译 java 时忽略未解析的符号

Ignore unresolved symbols when compiling java with javac

我在 STS 和 it reports missing class 中使用 Google 插件。我决定采用一种快速而肮脏的方式下载 class,编译它并将其放入插件文件夹或 jar 文件中。

class 在这里:Java2HTMLEntityReader.java

当我编译时,我当然会得到一些错误:

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 路径上时它会工作。

编译成功意味着源代码应该没有错误。

如果您的代码包含编译错误,它将无法编译并且不会生成 .class 文件

如果您使用 Eclipse 编译器编译 class,您可以请求创建 .class 文件,尽管存在编译错误。在命令行上,这是使用选项 -proceedOnError 完成的。据我所知,javac 没有这样的选项。

请注意,API 位置中未解析的类型(超类型、方法签名)可能导致生成的 class 文件无用。

我真的没有看到破解这样一个存根 .class 文件进行编译的充分理由。如果您在运行时有相应的 jar 文件可用,那么您应该在编译期间也使用相同的 jar。