Компилятор Eclipse JDT говорит, что метод не определен, а Eclipse IDE - нет

Я использую библиотеку под названием iText (добавлена ​​в проект с использованием файла JAR). Его API можно увидеть здесь: https://coderanch.com/how-to/javadoc/itext-2.1.7/com/lowagie/text/Image.html

В моем проекте у меня есть простой файл Java, называемый Worker.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() функция. Эта функция является частью com.lowagie.text.Rectangle класс, который расширяет класс Image.

При компиляции этого кода в Eclipse среда IDE быстро распознает, что функция исходит от Rectangle Класс и компилируется без каких-либо ошибок.

Тем не менее, если я использую автономный ecj-4.4.jar файл для компиляции проекта с помощью Batch Compiler (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 ответ

Решение

В то время как eclipse берет свои настройки пути к классам из соответствующего проекта, пакетный компилятор этого не делает. Вы должны включить свои библиотеки в ваш путь к классам.

Смотрите документацию по пакетному компилятору здесь и посмотрите параметр -cp. Вы должны включить соответствующую библиотеку там.

РЕДАКТИРОВАТЬ: Наличие одинаковых банок в обоих classpath недостаточно. Вы также должны принять заказ во внимание.

Другие вопросы по тегам