Eclipse JDT编译器说方法是未定义的,但Eclipse IDE没有

时间:2017-07-13 20:33:16

标签: java eclipse eclipse-jdt ecj

我正在使用名为iText的库(使用JAR文件添加到项目中)。它的API可以在这里看到:https://coderanch.com/how-to/javadoc/itext-2.1.7/com/lowagie/text/Image.html

在我的项目中,我有一个名为Worker.java的简单Java文件,它使用了这个库:

import com.lowagie.text.Image;
public class Worker {
    public void createDetails() {
        Image img;
        try {
            img = Image.getInstance("...");
            float h = img.getHeight();
            float w = img.getWidth();
            ...
        } catch (Exception e) {...}
    }
}

在上面的代码中,使用Image函数检索img.getHeight()对象的高度。此函数是Image类扩展的com.lowagie.text.Rectangle类的一部分。

在Eclipse中编译此代码时,IDE会快速识别该函数来自Rectangle类,并且编译时没有任何错误。

但是,如果我使用独立的ecj-4.4.jar文件使用批处理编译器(BatchCompiler.compile(...))编译项目,编译器将报告以下错误:

1. ERROR in C:\...\Worker.java (at line 7)
        float h = img.getHeight();
                      ^^^^^^^^^
The method getHeight() is undefined for the type Image
----------

我无法弄清楚为什么会抛出这个错误。如果这是一个真正的错误,那么Eclipse为什么不报告它?

编辑:类路径中有两个版本的JAR,这就是错误似乎出现的原因。不幸的是,由于这是一个多人参与的大型项目,我无法从项目中删除重复的JAR。但是,Eclipse IDE在查找方法的正确JAR时似乎没有任何问题,那么为什么编译器会遇到这个问题呢?

1 个答案:

答案 0 :(得分:1)

虽然eclipse从相应的项目中获取了类路径设置,但批处理编译器并没有这样做。您必须将库包含在类路径中。

请参阅the batch compiler's documentation here并查看-cp选项。你应该在那里包括相应的库。

编辑:在两个类路径中使用相同的jar是不够的。您还必须考虑订单。