Ответ 1
Я создал папку с именем a в /home/prasanth и скопировал ваш код в файл с именем A.java. Я собрал /home/prasanth как javac a/A.java
и запустил javac a.A
. Я получил результат как
a!
Я распаковал свой jdk в /usr/java/.
и я помещаю CLASSPATH, PATH, JAVA_HOME в /etc/profile, как показано ниже.
export JAVA_HOME=/usr/java/jdk1.7.0_21
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
И когда я компилирую некоторый java файл в /usr/java/jdk 1.0.7_21/bin,
он работает. Но когда я делаю то же самое в другой папке, это не так.
Он отображает NoClassDefFoundError.
Итак, я проверил CLASSPATH, PATH, JAVA_HOME через эхо.
Он отображается, как показано ниже.
[[email protected] a]# echo $JAVA_HOME
/usr/java/jdk1.7.0_21
[[email protected] a]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/guest/bin:/usr/java/jdk1.7.0_21/bin:/usr/java/bin:/usr/java/jdk1.7.0_21/bin
[[email protected] a]# echo $CLASSPATH
/usr/java/jdk1.7.0_21/jre/lib/ext:/usr/java/jdk1.7.0_21/lib/tools.jar
Я хочу использовать java в консоли, что я могу сделать в этой ситуации?
Спасибо заранее.
PS. я сделал source /etc/profile
.
================= Ошибки, с которыми я сталкиваюсь ====================== =
когда я команду java A (Мое имя класса A).
Error: Could not find or load main class A
case я command java -cp/home/guest/workspace/AAA/src/a/A
Exception in thread "main" java.lang.NoClassDefFoundError: A (wrong name: a/A)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
====================== Весь контент моего кода ===================== ================= java часть. путь -/usr/guest/workspace/AAA/src/a/A.java
package a;
public class A {
public static void main(String[] args) {
System.out.println("a!\n");
}
}
/etc/profile. левая часть по умолчанию.
export JAVA_HOME=/usr/java/jdk1.7.0_21
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
другие части могут быть полезны для решения.
which java
печатает "/usr/java/bin". там символическая ссылка.Спасибо за такой интерес. даже если это не выяснено. ваша помощь была для меня отличным исцелением: D Еще раз спасибо.
Я создал папку с именем a в /home/prasanth и скопировал ваш код в файл с именем A.java. Я собрал /home/prasanth как javac a/A.java
и запустил javac a.A
. Я получил результат как
a!
Найти здесь для centos jre установить всех пользователей:
Самый простой способ установить переменную среды в CentOS - использовать экспорт, как в
$> export JAVA_HOME=/usr/java/jdk.1.5.0_12
$> export PATH=$PATH:$JAVA_HOME
Однако переменные, установленные таким образом, являются переходными, т.е. они исчезнут в момент выхода из оболочки. Очевидно, что это не помогает при настройке переменных среды, которые необходимо сохранить, даже когда система перезагружается.
В таких случаях вам необходимо установить переменные в пределах профиля системы. В CentOS (Im, использующем v5.2), папка/etc/profile.d/является рекомендуемым местом для добавления настроек в системный профиль.
Например, при установке Sun JDK вам может потребоваться установить переменные среды JAVA_HOME и JRE_HOME. В этом случае:
Создайте новый файл с именем java.sh
vim /etc/profile.d/java.sh
Внутри этого файла инициализируйте необходимые переменные среды
export JRE_HOME=/usr/java/jdk1.5.0_12/jre
export PATH=$PATH:$JRE_HOME/bin
export JAVA_HOME=/usr/java/jdk1.5.0_12
export JAVA_PATH=$JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
Теперь при перезагрузке компьютера переменные среды в java.sh будут автоматически инициализированы (checkout/etc/profile, если вам интересно, как загружаются файлы в файле /etc/profile.d/).
PS: Если вы хотите загрузить переменные среды в java.sh
без перезагрузки машины, вы можете использовать команду источника, как в:
$> source java.sh
Инструкции:
which java
чтобы найти путь к исполняемому файлу Java.su -
чтобы стать пользователем root.vi/root/.bash_profile
чтобы открыть системный файл bash_profile в текстовом редакторе Vi. Вы можете заменить vi предпочитаемым текстовым редактором.export JAVA_HOME=/usr/local/java/
в нижней части файла. Замените /usr/local/java
расположением, найденным на втором шаге.exit
чтобы закрыть корневой сеанс.echo $JAVA_HOME
чтобы убедиться, что путь был задан правильно.Кажется, что у вас нет проблем с переменными окружающей среды.
Скомпилируйте файл из src с помощью
javac a/A.java
Затем запустите свою программу как
java a.A
Мне пришлось изменить /etc/profile.d/java_env.sh, чтобы указать на новый путь, а затем выйти/войти.
Сделайте следующие шаги:
экспорт JAVA_HOME =/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/
Примечание. Я использую CentOS7 в качестве ОС.