Как скомпилировать файл .java в Java? - PullRequest
6 голосов
/ 17 февраля 2010

У меня есть следующий код, сгенерированный Eclipse (файл .java).

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Display;

public class HelloWorldSWT {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Hello world!");
        shell.open();
        while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();
    }

}

Теперь я хочу скомпилировать указанный выше файл из командной строки. Я пошел в каталог, где находится исходный код, и я попробовал две команды:
1. javac HelloWorldSWT.java
2. javac -d / home / myname / workspace / HelloWorldSWT.java

В обоих случаях у меня одна и та же ошибка: «Не удается разрешить импорт org.eclipse». / home / myname / workspace / - каталог, в котором находится файл класса.

Насколько я понимаю, компилятор не видит пакет org.eclipse.swt. Почему?

Может ли это быть потому, что проблемный пакет находится в "/home/myname/workspace/org.eclipse.swt/" (а не в "/ home / myname / workspace / org / eclipse / swt /")?

Ответы [ 7 ]

5 голосов
/ 17 февраля 2010

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

5 голосов
/ 17 февраля 2010

Хорошо, Стивен С Я сделал эту работу вручную. Я использовал только Блокнот ++ (обещаю)

  1. Запустите Notepad ++ и создайте файл HelloWorldSWT.java
  2. Скопировать пример с автора
  3. Сохрани это!
  4. Откройте cmd и перейдите в каталог с HelloWorldSWT.java
  5. Выполнить команду javac HelloWorldSWT.java

  6. Хорошо, перейдите в каталог Eclipse и найдите правильный jar swt-3.4.2-win32-win32-x86.jar

  7. Запустите это снова

    D:\workspaces\spf_workspace\hand-made>javac -cp "D:\Program files\eclipse3_5\plugins\org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar" HelloWorldSWT.java

Весь процесс занимает 2 минуты.

Не пытайтесь запустить это:

`D:\workspaces\spf_workspace\hand-made>java -cp "D:\Program files\eclipse3_5\plugins\org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar;." HelloWorldSWT`

Примечание: я добавляю текущий каталог. к classpath тоже.

2 голосов
/ 17 февраля 2010

Поскольку вы занимаетесь разработкой Eclipse RCP, вы должны позволить Eclipse также управлять вашей компиляцией. (Скорее всего, вы найдете ваши классы в каталоге "build" или "bin" в проекте). В дополнение к компиляции будут некоторые «упаковочные» шаги для создания конечного приложения, и в Eclipse также есть инструменты для этого.

Если вы действительно хотите построить вне Eclipse, вам нужно управлять потенциально большим списком зависимостей (например, org.eclipse.swt.widgets), что делает чистый javac невозможным. Вам нужно будет посмотреть на муравья или мавена.

Также обратите внимание, что вам понадобится classpath для включения зависимостей не только для компиляции, но и при запуске программы.

0 голосов
/ 17 февраля 2010

@ Роман - эта проблема слишком сложна для начинающего, чтобы попытаться решить. Проблема в том, что SWT имеет сложные зависимости, включая зависимости от библиотек собственного кода.

Лучше всего запускать свое приложение SWT с помощью Eclipse "RunAs" ... или пытаться найти в Eclipse документацию по запуску приложений на основе SWT из командной строки.

0 голосов
/ 17 февраля 2010

Переменная classpath или переключатель командной строки должны указывать, где находится класс org.eclipse.swt.widgets.Shell. Если этот класс находится внутри файла jar, то в classpath должен содержаться фактический файл jar,

т.е. javac -classpath /root/to/jar/eclipse.jar

В противном случае, если класс org.eclipse.swt.widgets.Shell является просто свободным файлом класса (я сомневаюсь, я предполагаю, что он будет внутри одного из файлов jar eclipse, который вы можете перечислить, используя jar -tvf jar-you-think-it-might-be-in.jar) ... тогда вам потребуется javac -classpath, чтобы указать местоположение каталога верхнего уровня в пути org/eclipse/swt/widgets/.

0 голосов
/ 17 февраля 2010

Но я думаю, что во время компиляции я указываю "classpath" (используя опцию -d).Я думал, что после опции «-d» я помещаю имя каталога, в котором находятся все мои пакеты.Я правильно понимаю, что?

попробуйте

javac -help

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

компиляция из командной строки и настройка classpath, и все правильно, это боль.однако полезно сделать это, чтобы вы понимали, что на самом деле делает ide, когда автоматизирует это для вас.

0 голосов
/ 17 февраля 2010

Вы забыли о classpath

...