Импорт банок не работает - PullRequest
       27

Импорт банок не работает

1 голос
/ 09 сентября 2010

Я пытаюсь сделать что-то очень простое. Все, что я хочу сейчас сделать - это создать файл, содержащий соответствующие классы.

У меня есть файл с именем Promomon.java

class Promomon {
  public static void main(String[] args)
  {
    System.out.println("Hello World!");
  }
}

Простой простой, все в порядке. Я могу скомпилировать и запустить, и я вижу Hello World!.

Теперь я добавляю классы, которые хочу использовать.

import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

Это было взято прямо из документов Apache POI.

  • Я использую Ubuntu 10.04. Я установил Java с помощью synaptic (apt-get install openjdk-6-jdk)
  • Java установлена ​​в / usr / lib / jvm / java-6-openjdk / jre /
  • JAVA_HOME установлен в "/ usr / lib / jvm / java-6-openjdk / jre /"

    $ echo $ JAVA_HOME
    / usr / lib / jvm / java-6-openjdk / jre /

  • Я сам создавал фляги POI, используя Ant, никаких проблем.

  • Я поместил фляги в директорию lib Java. (/ USR / Библиотека / JVM / Java-6-OpenJDK / JRE / Библиотека /)

    $ ls -l / usr / lib / jvm / java-6-openjdk / jre / lib / poi *
    -rw-r - r-- 1 корневой корень 1539296 2010-09-08 12:40 /usr/lib/jvm/java-6-openjdk/jre/lib/poi-3.6-20100908.jar
    -rw-r - r-- 1 корневой корень 69142 2010-09-08 12:40 /usr/lib/jvm/java-6-openjdk/jre/lib/poi-contrib-3.6-20100908.jar
    -rw-r - r-- 1 корневой корень 181907 2010-09-08 12:40 /usr/lib/jvm/java-6-openjdk/jre/lib/poi-examples-3.6-20100908.jar
    -rw-r - r-- 1 корневой корень 412788 2010-09-08 12:40 /usr/lib/jvm/java-6-openjdk/jre/lib/poi-ooxml-3.6-20100908.jar
    -rw-r - r-- 1 корневой корень 3774336 2010-09-08 12:40 /usr/lib/jvm/java-6-openjdk/jre/lib/poi-ooxml-schemas-3.6-20100908.jar
    -rw-r - r-- 1 корневой корень 795893 2010-09-08 12:40 /usr/lib/jvm/java-6-openjdk/jre/lib/poi-scratchpad-3.6-20100908.jar

  • Мой classpath установлен в этот каталог.

    $ echo $ CLASSPATH
    / usr / lib / jvm / java-6-openjdk / jre / lib /

Что, черт возьми, я делаю не так? Я также пытался использовать готовые двоичные файлы, без изменений.

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Когда вы указываете jar в classpath, вы не можете просто указать каталог, в котором они находятся, вам нужно явно перечислить jar (изменение, на которое ссылается Jon Skeet в jdk6, может быть изменением, но я не помню это тоже).

Я бы не поместил эти jar-файлы в каталог jdk lib. Создайте каталог lib рядом с каталогом src для вашего файла Promomon.java, добавьте к нему ваши jar-файлы и перечислите jar-файлы по отдельности в classpath при компиляции и запуске. И когда я говорю classpath, я не имею в виду переменную окружения. Вот несколько альтернатив:

  • создайте пару исполняемых файлов, которые содержат команды компиляции и запуска, и добавьте jar-файлы в список элементов в ключе -cp.
  • Получите муравей и создайте файл build.xml.
  • Используйте IDE, например eclipse, и укажите jar (в меню Eclipse выберите File-> BuildPath-> Configure Build Path и перейдите на вкладку "Libraries").

Переход от "Hello World" к программе, использующей сторонние библиотеки, - это большой шаг в Java. Простой подход к компиляции и запуску чего-либо перестает работать быстро.

Кстати, я посмотрел его здесь и изменение JDK6 заключается в том, что вы можете использовать подстановочные знаки в пути к классам, поэтому вместо перечисления банок по отдельности, например

-cp=/usr/myapp/classes:/usr/myapp/lib/foo.jar:/usr/myapp/lib/bar.jar

Вы можете сказать

-cp=/usr/myapp/classes:/usr/myapp/lib/*.jar
1 голос
/ 09 сентября 2010

Помещение файлов jar непосредственно в каталог lib не поможет. Вы можете поместить их в jre / lib / ext, или , вы можете указать другой каталог ext (javac -extdirs=... и java -Djava.ext.dirs=...), или , вы можете указать файлы jar явно.

РЕДАКТИРОВАТЬ: у меня есть подозрение, что что-то меняется, чтобы облегчить это с Java 6, но я не могу вспомнить, что. Вышесказанное должно рассортировать вас, пока кто-нибудь не укажет на то, что я забыл:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...