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

使用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

我使用谷歌插件在STS和。我决定以一种快速而肮脏的方式下载这个类,编译它并将其放入插件文件夹或jar文件中

课程在这里:

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

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。