Компилятор 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 недостаточно. Вы также должны принять заказ во внимание.