Как импортировать JAR и пакеты в Java - PullRequest
8 голосов
/ 08 сентября 2010

Я относительно новичок в Java.Я использовал Eclipse, чтобы сделать некоторую работу, но я хочу вернуться к основам и просто использовать текстовый редактор в сочетании с JDK.Сейчас у меня проблема в том, что Eclipse и другие IDE скрывают много фундаментальных вещей, которые очень важно знать и полностью понимать.Вот что я пытаюсь сделать:

  • Я создал каталог с именем "C: \ Java Projects", в котором я создал 3 подпапки, Project1, Project2и SharedJars.Project1 и Project2 имеют SubDirs, такие как классы и источник.Исходные файлы .java Poject1 находятся в "c: \ Java Projects \ Project1 \ source \ com \ myApp"

  • И Project1, и Project2 являются пакетами, использующими JAR Log4J, который находится вПапка SharedJars.В мире Eclipse я мог установить что-то, что сообщало Eclipse, какие JAR-файлы будет использовать мой проект, а затем делать что-то вроде import org.apache.log4j.Logger, который работал нормально.Но я изо всех сил пытаюсь заставить это работать.

  • Я установил переменную среды CLASSPATH как "C: \ Java Projects \ SharedJars \ log4j-1.2.15.jar"

  • Затем я делаю следующее:

    cd Project1 \ source
    javac -d .. \классы com \ myApp \ *

  • Это приводит к целой куче связанных ошибок, таких как

Picked _JAVA_OPTIONS: -Duser.home = "C: \ Java Projects"
com \ myApp \ Monitor.java: 11: не удается найти символ
символ: класс Logger
расположение: класс com.myApp.Monitor
частная статическаяLogger LOG;

Некоторые вопросы: 1) Мне все еще нужно импортировать org.apache.log4j.Logger?2) Если да, что определяет полное доменное имя пакета?3) Нужно ли находиться в определенном каталоге, чтобы запустить javac?В настоящее время я иду в исходный каталог Project1 (java / bin уже находится в моем PATH)

Извините за эти глупые вопросы.Я просмотрел очень много сайтов, но многие из них не охватывают самых основ.Я надеюсь, что это имеет смысл.

Rgds John

Ответы [ 3 ]

4 голосов
/ 08 сентября 2010

Добро пожаловать в SO.

В ответ на это:

Нужно ли мне импортировать org.apache.log4j.Logger?

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

Если так, что определяет полное доменное имя пакета?

Внутриjar, файлы .class расположены в таких подкаталогах, как это: org/apache/log4j ... и т. д. Так определяется полное доменное имя, которое используется в основном как конструкция пространства имен, поэтому вы можете иметь два или более классов с одинаковым именем, что такжепочему Java не может загрузить все на пути к классам.Если бы это было так, у него не было бы возможности устранить неоднозначность и определить, какой класс вам нужен.

Нужно ли находиться в определенном каталоге для запуска javac?

Нет.Вы можете запустить это из любого места, при условии, что classpath, где бы вы ни находились, может добраться до ваших зависимостей.Это может быть относительный путь к классу, если он указан в командной строке, или абсолютный, если он указан в переменной среды.Точно так же вам не нужно находиться в определенном каталоге, чтобы использовать java, но вам нужно, чтобы он мог добраться до нужного местоположения.

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

1) Мне все еще нужно импортировать org.apache.log4j.Logger?

Да, это так, и это должно исправить ошибку в вашем вопросе, потому что ваш CLASSPATH правильный.

2) Если да, что определяет полное доменное имя пакета?

import не изменяет полное доменное имя пакета. Он просто позволяет вам ссылаться на org.apache.log4j.Logger просто как Logger в этом файле.

3) Нужно ли находиться в определенной директории для запуска javac?

Нет, но проще всего, если текущим каталогом является каталог source проекта, который вы компилируете (если это не так, вы можете обойти его с помощью опции -sourcepath, равной javac.)

Что касается запуска программы, вы можете создать Project1.jar и использовать манифест, чтобы сообщить ему, где найти log4j.jar, но это отдельный вопрос .

0 голосов
/ 16 апреля 2012

Я публикую свое решение, потому что ни одно из указанных выше решений не подходит для меня.Это работает для меня под Windows XP / 7.

РЕШЕНИЕ

  1. Загрузите zip или tar пакет с сайта log4j [1] на свой компьютер и распакуйте скачанный файл.
  2. Скопируйте файл log4j-VERSION.jar на ваш LOG4J_ISTALLATION_DIR (например, c: \ javalibs \ log4j-1.2.16.jar)
  3. Откройте Свойства «Мой компьютер / Компьютер» (значок должен быть размещен на вашем рабочем столе,просто щелкните на нем правой кнопкой мыши и выберите «Свойства»)
  4. Откройте вкладку «Дополнительные параметры системы».
  5. Откройте вкладку «Дополнительно»
  6. Нажмите кнопку «Переменные среды».
  7. Найдите переменную CLASSPATH в области «Переменные среды», сопоставьте ее с левой кнопкой и нажмите кнопку «Изменить».
  8. Вставьте / введите путь к вашей библиотеке log4j - LOG4J_ISTALLATION_DIR \ log4j-VERSION.jar;(например, c: \ javalibs \ log4j-1.2.16.jar;)
  9. Нажмите кнопку «ОК».
  10. Нажмите кнопку «ОК» в окне «Переменные среды».
  11. Нажмите кнопку «ОК» в окне «Свойства системы».
  12. Перейдите в командную строку и проверьте, все ли работает, попробовав пример из краткого учебного пособия log4j (см. Ниже):

    cd c: \ Users \ User \ log4j
    javac MyApp2.java
    2012-03-30 21:32 510 Bar.class
    2012-03-30 21:24 177 Bar.java
    2012-03-30 21:26 334 MyApp2-log4j.properties
    2012-03-30 21:32 916 MyApp2.class
    2012-03-30 21:25 775 MyApp2.java
    javaMyApp2 MyApp2-log4j.properties
    0 [main] INFO MyApp2 - вход в приложение
    2 [main] DEBUG Bar - сделал это снова
    3 [main] INFO MyApp2 - выход из приложения

КОНТЕКСТ: подготовить программу, которая использует * файл jar [1] (источник проблемы):

// 1. Перейдите в исходный каталог (например, c: \ Users \ Hopbit \log4j)

// 2. Создать ниже класс Bar и сохранитьe как Bar.java

import org.apache.log4j.Logger;

public class Bar {
  static Logger logger = Logger.getLogger(Bar.class);
  public void doIt() {
    logger.debug("Did it again!");
  }
}

// 3. Создайте ниже класс MyApp2 и сохраните как MyApp2.java

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class MyApp2 {

  static Logger logger = Logger.getLogger(MyApp.class.getName());

  public static void main(String[] args) {

    // BasicConfigurator replaced with PropertyConfigurator.
    PropertyConfigurator.configure(args[0]);

    logger.info("Entering application.");
    Bar bar = new Bar();
    bar.doIt();
    logger.info("Exiting application.");
  }
}

// 4. Создайте и сохраните файл MyApp2-log4j.propertiesкоторый содержит следующий код:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

// 5. Попробуйте скомпилировать приведенный выше пример, он должен вернуть что-то вроде этого:

> c:\Users\Hopbit\log4j>javac MyApp2.java
> MyApp2.java:1: package org.apache.log4j does not exist
> import org.apache.log4j.Logger;
>                         ^
> // [...] SOME OTHER ERRORS HERE

LINKS & HINTS

[1] http://logging.apache.org/log4j/1.2/manual.html («Краткое введение в log4j: Ceki GŁlcŁ, март 2002»)
[2] http://logging.apache.org/log4j/1.2/download.html
[3] Вышеупомянутое решение было найдено в файле INSTALL, в котором находится пакет uder log4j,

...