2016-03-08 210 views
1

我在STS和it reports missing class中使用Google插件。我決定去一個快速和骯髒的方式,下載類,編譯它,並將其放入插件文件夾或jar文件。使用javac編譯java時忽略未解決的符號

類是在這裏: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編譯器指向同包。我不打算!我想用這些錯誤編譯它,我認爲它會在我將它放在正確的類路徑上時起作用。

+0

將org.eclipse.jdt.internal.compiler.parser包含到javac的類路徑中,或者只能使用SubstitutionTextReader.class – Rustam

+0

如果編譯器不知道涉及的類型,編譯器應該如何編譯? – 2016-03-10 13:42:52

+0

@LutzHorn這些類型需要什麼? Java不是內存感知的,沒有靜態分配,所以不需要我們談論的數據。畢竟,所有的ArrayList只是'List '和實際的''在編譯時並不重要。不要把Java看作是編譯期間真正做某些事情的其他語言。 –

回答

0

如果要使用Eclipse編譯器來編譯類,你可以要求創建.class文件儘管編譯錯誤。在命令行中,使用選項-proceedOnError完成此操作。據我所知,javac沒有這樣的選項。

請注意,API位置(超類型,方法簽名)中未解析的類型可能導致生成的類文件無用。

我真的沒有看到一個很好的理由來破解這個存根.class文件進行編譯。如果你在運行時有相應的jar文件,那麼在編譯期間你也應該使用相同的jar文件。

+0

我試過一次,我發現了,但沒有用。 'javac'忽略提供的jar classpath並且一直抱怨缺少的類,儘管我可以在jar文件中找到它們。我有日食,所以我會嘗試也許它會工作。 –

+0

@TomášZato,'javac'忽略類路徑上的jar聽起來像是在配置/調用javac中的錯誤。 –

-1

成功編譯意味着源代碼中應該沒有錯誤。

如果你的代碼包含編譯錯誤不能編譯,不會產生.class文件

+0

不正確。你可以用'.class'文件解析引用就好了。不要忘記java編譯過程是對稱的。 –

+0

如果您編譯單個類,則其所有引用都應存在於類路徑中。另一方面,您可以使用像'maven'這樣的複雜引用機制,您可以在其中提供maven scope''提供''。 – adranale

+0

引用不需要創建字節碼。它們是否存在對所生成的字節碼沒有影響。這可能是因爲javac不允許你編譯 - 但它肯定是可能的,就像在沒有這些引用的情況下反編譯類一樣。 –