Як встановити змінну CLASSPATH для папки в Ubuntu


16

Я знаю, що export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHдодасть tools.jar до CLASSPATH, але я хочу встановити папку в CLASSPATH

подобається це

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

але це не працює.

Відповіді:


11

По-перше, загалом, встановлення env var CLASSPATHзазвичай викликає більше проблем, ніж це вирішує - оскільки не всі програми хочуть / потребують одного і того ж класного шляху, і часто ламаються, коли небажані або навіть непотрібні банки включені в класний шлях. Додаток java має містити лише мінімальну кількість банок, яке йому потрібно, ні більше, ні менше.

Якщо у вас є конкретні, окремі додатки , які вимагають, щоб встановити шлях до класів, то кращим є , як правило , параметр командного рядка: java -cp path1:path2:.... Піктограми робочого столу можуть змінити свою команду, щоб включити ці параметри, або скрипти оболонки можна змінити, щоб включити ці параметри.

Якщо говорити (а оскільки з правила завжди є винятки), то залежно від версії java (для цього потрібна java 6 або пізніша версія), ви можете вказати, що до каталогу classpath буде додано цілий каталог jar, додавши " *" в кінці каталогу; наприклад, наступне:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Засоби:

  • /dir1/foo.jar - (одиночна баночка) буде додана в класний шлях;
  • /dir2/dir3- всі класи, які не містять jar в цьому каталозі, будуть додані до шляху класів (повинні бути у належній структурі пакета; наприклад, com.my.Foo.classповинні бути в /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- всі банки в цьому каталозі (тобто /dir5/dir6/*.jar) будуть додані до classpath. Зауважте, що цей " *" не є символом підключення (ви не можете використовувати f*.jarабо навіть *.jar); це спеціальний символ із зазначенням "додати всі банки"

Загалом, якщо вам доведеться додати цілий каталог банок на класний шлях програми, додаток було невпорядковано. Швидше, додаток повинен мати маніфест, що містить перелік банок, від якого залежить. Або принаймні, до вашого класового шляху слід додати лише одну банку, і ця баночка може мати в своєму маніфесті весь список банок у якомусь підкаталозі.


На це мені потрібно більше 5 годин, щоб зрозуміти це в ubuntu 12.04. Після складання файлу та запуску класу важливі дві речі. 1. Чи використовуєте ви пакет у своєму класі. І вам потрібно використовувати "java -cp. ClassName" у батьківській папці пакета. 2. Ви повинні використовувати ".:" Як "java -cp .: / usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
Чжихонг

@zhihong, ви повинні розглянути можливість використання IDE, як netbeans, дозволити його відкладати інструмент збирання у використанні, який фактично налаштовує ваш класний шлях. У Netbeans створити новий проект, використовуючи maven або gradle (або мурашник, - але це стає занадто складним при роботі із залежностями (див. Також: завдання mven mven, які я віддаю перевагу над плющем)). Gradle - це наразі «гаряча» річ, вигадка; ви повинні спробувати. Крім того, (1) ви завжди повинні використовувати назви пакетів; і (2) ніколи не потрібно включати класи в каталог jvm на classpath; вони вже перебувають у "завантажувальному" класі.
michael

дякую за вашу пропозицію Власне, я використовую eclipse, і код працює там правильно, але коли я запускаю його в терміналі, то отримав "ClassNotFoundException". Я спробував багато способів додати зовнішню lib / jar, але все не вдалося. Нарешті, він працює, включаючи каталог jvm та зовнішній lib / jar в командний рядок З. Але, я спробував сьогодні, ви маєте рацію, каталог jvm не потрібен.
Чжихун

2

якщо ви хочете постійно встановити classpath, то 1) дізнайтеся, де встановлено java .. ви можете використовувати "whereis java" openjdk-7/6 в / usr / lib / jvm / .....

2) нам потрібно встановити CLASSPATH в / etc / середовищі

  sudo gedit /etc/environment

3) додайте наступні лайки .. (НЕ ПІДТРИМУЙТЕ будь-яких просторів при типізації) (налаштувати відповідно до вашої версії та установки Java) (цей домашній шлях призначений для відкритого jdk 7)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

окремий каталог за ":"


Чому всі додають "{JAVA_HOME} / lib" на свій класний шлях? Це не потрібно або навіть гарна ідея. З цього приводу, встановлення ENV CLASSPATH також є поганою ідеєю, якщо тільки це не в оболонковому скрипті, саме для цього сценарію, і в цьому випадку варіант командного рядка "-cp" для Java все ще буде кращим.
michael

0

відкритий термінал і введіть

sudo nano ~ / .bashrc

додати весь необхідний експорт, як ...

експортувати JAVA_HOME = / usr / local / java / jdk1.6.0_06 (ваш шлях)

експортувати ANT_HOME = / opt / ant / apache-ant-1.9.4

нарешті, перезапустіть термінал, щоб зміни набрали чинності

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.