Вопрос по eclipse, java – Запустите проект Eclipse из командной строки

8

У меня две проблемы, касающиеся компиляции и запуска Java-проекта Eclipse из командной строки. Это прекрасно работает, когда я просто запускаю из Eclipse IDE. Я попробовал поискать в Google, но не смог заставить эту вещь работать. Буду признателен за любую оказанную помощь.

Проблема 1: Когда я пытаюсь скомпилировать из места, отличного от каталога, в котором находится файл .java, он выдает ошибку & quot;cannot read: myfile.java& Quot ;. Но если я перейду в этот каталог, он скомпилируется
Команда, которую я давал (в каком-то другом каталоге):
javac -cp C:\ABC\src\XYZ myfile.java
Команда, которую я давал, находясь в каталоге XYZ:
javac myfile.java
Это сгенерировало два файла .class myfile.class и Testing_Thread.class (думаю, потому что в моем коде есть нить)

Проблема 2: После компиляции, перейдя в ее каталог, при попытке запустить программу я получаю сообщение об ошибке & quot;Exception in thread "main" java.lang.NoClassDefFoundError: myfile (wrong name: XYZ/myfile.java)& Quot; даже когда я пытаюсь запустить из каталога XYZ. Я получаю ту же ошибку, когда пытаюсь бежать из другого места.
Команда, которую я давал, находясь в каталоге XYZ:
java myfile
Команда, которую я давал, когда в каком-то другом месте:
java -cp C:\ABC\src\XYZ myfile

Я также присоединяю иерархию моей структуры каталогов, если это поможет:
enter image description here

Ваш Ответ

1   ответ
8

C:\temp\compile-test\src\a\b\c\D.java

Где D.java находится:

package a.b.c;

public class D { }

Первая проблема,cannot read: myfile.java, потому что это не правильно использоватьcp опция командной строки, чтобы указать на ваш исходный код.

C:\temp\compile-test\src>javac -cp c:\temp\compile-test\src\a\b\c D.java
javac: file not found: D.java
Usage: javac <options> <source files>
use -help for a list of possible options

Вместо этого это должно быть следующим, гдеjavac запускается из вашей исходной папки, и мы можем использовать относительные пути к исходным файлам (ПРИМЕЧАНИЕ.javac запускается из исходной папки здесь):

C:\temp\compile-test\src>javac a\b\c\D.java

Или это, где мы указываем полные пути к исходным файлам, иjavac может быть запущен из любого места (ПРИМЕЧАНИЕ -javac запускается изC:\ Вот):

C:\>javac temp\compile-test\src\a\b\c\D.java

Обе вышеуказанные опции приведут к тому, что ваши файлы классов будут созданы в той же папке, что и исходный код. т.е .:

C:\temp\compile-test\src\a\b\c\D.class

Для второй проблемы, если вы попытаетесь запустить класс, который имеет имя пакета из «apos; inside» apos; пакет, это приведет к неправильному имени (ПРИМЕЧАНИЕ -java бежать из «изнутри» пакет здесь):

C:\temp\compile-test\src\a\b\c>java D
Exception in thread "main" java.lang.NoClassDefFoundError: D (wrong name: a/b/c/D)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: D.  Program will exit.

Чтобы запуститьD класс, вы должны быть в пакете "root" и предоставитьПолностью квалифицированное имя класса, т.е .:

C:\temp\compile-test\src>java a.b.c.D
Exception in thread "main" java.lang.NoSuchMethodError: main

Обратите внимание, что я получаю исключение какD У класса нет метода main, и поэтому он не может быть запущен. Чтобы исправить, мы добавляем основной метод:

package a.b.c;

public class D {
    public static void main(String[] args) {
        System.out.println("main");
    }
}

и повторите:

C:\temp\compile-test\src>java a.b.c.D
main
Error: User Rate Limit Exceeded sachin11

Похожие вопросы