Java запустить программу из консоли

Как я уже неоднократно упоминал, использование IDE быстро развращает начинающих программистов. Оконные средства разработки берут на себя многие операции, поэтому программист попросту не понимает всего, что происходит у него на экране монитора. Многие события проходят мимо него незамеченными. Так что, как и раньше, продолжаю работать в командной строке, благо, пока это не обременяет.

  1. Один проект — одна директория. Чтобы не было путаницы, называть её стоит так же, как проект.
  2. В этой директории две папки: src и bin (или source/build(classes)) — как кому больше нравится.
  3. В этой же директории будут находиться и все остальные файлы, связанные с проектом (музыка, картинки, файл с описанием, какие-то библиотеки).

C:JavasrcTest.java

Полный путь о скомпилированных файлов:

C:JavabinTest.class

Куда интереснее рассмотреть проект побольше, к тому же работающий.
2. Проект CrazyTetris.java, лежащий в пакете md.leonis.tetris:

04 — HelloWorld, main метод, запуск через консоль — Уроки Java для начинающих

C:JavasrcmdleonistetrisCrazyTetris.java и

C:JavabinmdleonistetrisCrazyTetris.class соответственно

Так как этот проект не маленький, использует графику и музыку, а так же имеет зависимость от сторонних библиотек, вот ещё некоторые пути:

C:Javalib. — тут подключаемые библиотеки
C:Javaresources. — графика и музыка
C:Javareadme.txt — файл с описанием
C:Javamanifest.mf — файл манифеста

Дерево каталогов для наглядности:

Исходный код проекта CrazyTetris:

При виде всего этого уже становится нехорошо, но в компании Sun о решении позаботились.

1. Компиляция.
Забегая вперёд скажу, что как и прежде, для компиляции я использую пакетные файлы. То есть, чтобы не писать гигантский код, я разнёс все данные по переменным.
Посмотрите сами, насколько громоздкими получаются команды:
Не дай Бог вводить всё это вручную каждый раз.

SET PROJECT=CrazyTetris
SET PACKAGE=md.leonis.tetris
SET FOLDER=mdleonistetris — это значение вычисляется автоматически
SET CLASSPATH=bin;libcommons-logging-1.2.jar;libbasicplayer3.0.jar;libmp3spi1.9.5.jar;libjl1.0.1.jar;libtritonus_share-0.3.6.jar
SET XLINT=-Xlint

Вызов компилятора (упрощённая форма):

javac [настройки] [исходные файлы]

Квадратные скобки означают, что оба набора параметров являются необязательными.

Вернёмся к проекту:

javac -classpath %CLASSPATH% -d bin -sourcepath src src%FOLDER%%PROJECT%.java %XLINT% 2>>errors.txt

Без переменных команда была бы такой:

javac -classpath bin;libcommons-logging-1.2.jar;libbasicplayer3.0.jar;libmp3spi1.9.5.jar;libjl1.0.1.jar;libtritonus_share-0.3.6.jar -d bin -sourcepath src srcmdleonistetrisCrazyTetris.java 2>>errors.txt

Урок по Java 63: Как компилировать и запускать классы через коммандную строку, плюс classpath

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

Без этих библиотек команда заметно сокращается:

javac -classpath bin -d bin -sourcepath src srcmdleonistetrisCrazyTetris.java 2>>errors.txt

  • -classpath путь: здесь указываются пути до уже скомпилированных файлов. Пути можно указывать абсолютные (C:Java. ), а можно и относительные. Сюда же, через точку с запятой можно добавить подключаемые библиотеки.
    Для компиляции в этом проекте ключ -classpath вообще можно не указывать, но при запуске его забывать нельзя понадобится.
  • -d путь: папка, куда будут складироваться откомпилированные файлы проекта. В самом начале мы её определили: bin. Её необходимо создать заранее. Все остальные вложенные папки компилятор построит самостоятельно.
  • -sourcepath путь: это путь к исходным файлам проекта. В нашем случае src. Если в проекте только один файл, то этот ключ можно не указывать вообще. В нашем же случае, при отсутствии этого ключа компилятор упадёт с ошибкой:
Читайте также:
Как закрыть программу если не работает мышь

«А если в проекте несколько файлов?» — Спросит внимательный читатель. И правда, исходных файлов может быть несколько. Компилятор в качестве разделителей понимает пробелы. Так же, можно использовать звёздочку, например *.java даст команду на компиляцию всех файлов. Но в этом отношении не стоит разгоняться, компилятор автоматически переведёт в байт-код все исходники, задействованные в программе.

2. Запуск программы.
Компилятор проверяет файлы с исходным кодом (*.java) и переводит их в байт-код. Его не запустить, подобно exe файлам. Зато файлы в формате байт-кода (class) могут исполняться в виртуальной машине Java, причём, одинаково хорошо на всех компьютерах и операционных системах, где эта машина установлена.

Конечно, это утопия, одинаковый код в Windows, Linux, MAC OS, Solaris в любом случае потребует соблюдения правил, принятый в файловых системах этих операционок. Например, доступ к некоторым путям открыт не везде и не каждому. Так же внешний вид оконных приложений может отличаться. Таких мелочей много.

java [настройки] имяКласса [аргументы]
java [настройки] -jar имяФайла [аргументы]

Синтаксис с ключом -jar позволяет запускать на выполнение jar файлы.

Вместо java.exe можно использовать оконную версию javaw.exe. Впрочем, она ничего не выводит в командную строку, а в нашей ситуации это минус.

Вот реальный пример:

java -classpath %CLASSPATH% %PACKAGE%%PROJECT% 2>>errors.txt

Тут уже без classpath не обойтись, как мы видим.
Обратите внимание на полное имя скомпилированного файла (класса): md.leonis.tetris.CrazyTetris
Это название пакета, потом через точку пишется имя файла без расширения.
Если добавим расширение — сразу же получим ошибку: Error: Could not find or load main class md.leonis.tetris.CrazyTetris.class
Хотя, эта ошибка очень распространённая, достаточно только написать не ту букву в пути.

2>>errors.txt в конце строки просит консольный вывод сохранять все найденные ошибки в файле errors.txt.
Если их мало, то все они умещаются на экране, а когда их сыпется несколько сотен — первые сообщения могут исчезнуть, как в случае Far Manager.

Для расширения кругозора можно этот ключик немного поменять.
Например, записывать не только ошибки, но и весь консольный вывод программы в файл log.txt. При этом используется дозапись данных:
>>log.txt 2>>»:
>log.txt

3. Создание JAR архива.
Если в программе всё устраивает — самое время заняться её публикацией. Разумно все классы разместить в одном архиве — легче передавать и меньше места.
Java и тут позволяет обойтись встроенные утилитами.
Тема создания jar файлов и манифестов очень обширная, не буду в одной теме забивать этим голову. Рассмотрим самый простой случай:

jar.exe -cfm %PROJECT%.jar manifest.mf -C bin .

Ключ -cmf: это команда создать (c) jar файл (f) и внести в него данные из файла-манифеста (m). Последовательность тут очень важна. Другой вариант вызова:

jar.exe -cmf manifest.mf %PROJECT%.jar -C bin .

После имени файла создаваемого архива в первом примере идёт название файла-манифеста, а следом всё то, что мы в него запакуем.
Нас интересует содержимое папки bin (без неё самой).

Читайте также:
Ваня написал программу для вычисления квадрата любого числа но допустил ошибку program kvadrat

Можно было бы включить а архив музыку и картинки, но доставать их оттуда, особенно музыку, достаточно накладно.
Лучше держать их отдельно.

Немного по файлу-манифесту:
Без него Java не разберётся какой именно файл в архиве нужно запускать. И уж тем более, виртуальная машина не знает ни о каких зависимостях.

Содержимое файла manifest.mf:

Manifest-Version: 1.0
Created-By: 1.7.0_72 (Oracle Corporation)
Main-Class: md.leonis.tetris.CrazyTetris
Class-Path: lib/commons-logging-1.2.jar lib/basicplayer3.0.jar lib/mp3spi1.9.5.jar lib/jl1.0.1.jar lib/tritonus_share-0.3.6.jar

  • Manifest-Version: версия манифеста. Не меняем
  • Created-By: версия вашей JDK
  • Main-Class: полный путь к главному (исполняемому) файлу проекта
  • Class-Path: пути, по которым можно найти подключаемые библиотеки.

4. Создание zip архива.
А вот теперь соберём всё, что относится к проекту в одном архиве:

7z.exe a -r -tzip -mx9 %PROJECT%.zip %PROJECT%.jar readme.txt resources lib

В этой команде архиватор 7z получает задание запаковать файлы, включая и содержимое поддиректорий в формат zip с максимальной степенью сжатия. Результирющий архив получит имя CrazyTetris.zip, и в него будут помещены файлы: CrazyTetris.jar, readme.txt, а так же содержимое папок resources и lib.

  • compile.bat: компиляция и запуск в случае успеха
  • run.bat: просто запуск на выполнение
  • jar.bat: создание jar архива
  • zip.bat: создание zip архива

_settings.bat
compile.bat

call _settings.bat SET FOLDER= IF NOT «%PACKAGE%»==»» SET FOLDER=%PACKAGE:.=% IF NOT «%PACKAGE%»==»» SET PACKAGE=%PACKAGE%. IF NOT «%FOLDER%»==»» SET FOLDER=%FOLDER% IF NOT EXIST .bin md .bin IF EXIST .bin%FOLDER%*.class DEL .bin%FOLDER%*.class IF EXIST errors.txt DEL errors.txt ECHO Compiling project %PACKAGE%%PROJECT%. REM ******************** REM команд(ы) компиляции REM ******************** javac -classpath %CLASSPATH% -d bin -sourcepath src src%FOLDER%%PROJECT%.java %XLINT% 2>>errors.txt ECHO. :wait IF NOT EXIST errors.txt GOTO wait FOR %%i IN (errors.txt) DO SET fsize=%%~zi IF NOT %fsize%==0 GOTO error ECHO Compiling succesful. Launching Java code.

REM ********************************** REM запуск откомпилированной программы REM ********************************** java -classpath %CLASSPATH% %PACKAGE%%PROJECT% 2>>errors.txt FOR %%i IN (errors.txt) DO SET fsize=%%~zi IF NOT %fsize%==0 GOTO error IF EXIST errors.txt DEL errors.txt GOTO end :error ECHO The compiler found the following errors: ECHO —————————————- ECHO. TYPE errors.txt ECHO. PAUSE :end
call _settings.bat ECHO Launching Java code. IF EXIST errors.txt DEL errors.txt IF NOT «%PACKAGE%»==»» SET PACKAGE=%PACKAGE%. ECHO OFF REM ********************************** REM запуск откомпилированной программы REM ********************************** java -classpath %CLASSPATH% %PACKAGE%%PROJECT% 2>>errors.txt ECHO. FOR %%i IN (errors.txt) DO SET fsize=%%~zi IF NOT %fsize%==0 GOTO error IF EXIST errors.txt DEL errors.txt GOTO end :error ECHO JVM found the following errors: ECHO ——————————- ECHO. TYPE errors.txt ECHO. PAUSE :end

Приятной работы

У этого подхода есть недостаток — привязка в Windows. Альтернативы:
ANT >>>
MAVEN >>>

Читайте также:
Узнать артиста по голосу программа

Размещено в Мой креатив
Просмотров 9467 Комментарии 2
Всего комментариев 2

Комментарии

Leonis, советую посмотреть в сторону Ant. Отличный сборщик. Конфиг прописал в xml для каждого проекта и собирай на счастье. Сам сначала собирал батником, потом задолбало. Перешел на Ant.

В итоге компилировал, собирал, подписывал jar’ки и запускал тесты быстро и удобно.

Это всё прелюдия к «муравью». Он у меня уже скачан, установлен и только усталость не позволяет перевести проекты на его рельсы прямо сейчас. К тому же, на этих примерах укажу недостатки, они не идеальны, например, в плане переносимости в Linux — эти пакетные файлы работать как надо не будут. Ant это универсальный сборщик, не зависящий от платформы и используемых IDE.

Источник: tv-games.ru

Компиляция и выполнение java программы с командной строки

Создадим в любом текстовом редакторе файл HelloWorld.java и содержимым:

class HelloWorld < public static void main(String[] args) < System.out.println(«Hello World!»); >>

Создаем байт-код на основании исходного текста программы, командой:

# Проверить версию компилятора javac -version ## Если javac не найден, убедитесь, что в системной переменной Path указан путь до JDK # Скомпилировать исходник в байт-код javac HelloWorld.java ## Получаем файл HelloWorld.class с байт-кодом # Посмотреть байт-код можно командой javap -v HelloWorld.class # Запустить программу по имени класса в текущей директории java HelloWorld

Когда мы из командой строки вызываем javac, java, javap — то вызываются javac.exe, java.exe, javap.exe из директории bin вашего JDK в Windows 10.

Аргументы

Метод main может принимать массив строк переменной длины. Напишем и протестируем программу выводящую в стандартный поток вывода переданные в метод main аргументы при запуске программы.

public class HelloWorld < public static void main(String[] args) < System.out.println(«Hello World!»); for (int i = 0; i < args.length; i++) < System.out.println(args[i]); >> >
javac HelloWorld .java java HelloWorld arg0 arg1 arg2 arg4 Hello World! arg0 arg1 arg2 arg4

Источник: pc-zver.ru

Запускать программы на Java из командной строки

Запускать программы на Java из командной строки

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

В этом руководстве мы обсудим, как запускать программы Java из командной строки.

Во-первых, нам нужен каталог bin, из которого установлен JDK. Как правило, его можно найти по следующему пути.

«C:Program FilesJavajdk1.8.0_91bin»

Теперь мы открываем командную строку и переходим в каталог, содержащий файл, который нам нужно запустить. Здесь нам нужно указать путь, чтобы система могла найти необходимые программы и инструменты JDK.

set path=%path%;C:Program FilesJavajdk1.5.0_09bin

Теперь убедитесь, что ваш файл Java должен иметь расширение .java .

yourfilename.java

Сначала мы компилируем файл .java в файл .class с помощью команды javac .

javac yourfilename.java

Наконец, мы можем запустить файл. Результат отображается в окне командной строки.

java yourfilename

Если при выполнении команды javac возникает какая-либо ошибка, это может быть связано с неправильным указанием пути.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru