Загрузить PDF
Загрузить PDF
Хотя многие среды программирования позволяют компилировать и запускать программы, их также можно скомпилировать и запустить с помощью командной строки. У Windows и Mac есть свои собственные версии командной строки, на Mac OS она называется Терминал. Процесс компиляции и запуска для Windows и для Mac практически идентичен.
-
1
Сохраните программу. Создав программу на Java с помощью текстового редактора, такого как NotePad, сохраните ее с расширением .java. Название файла, конечно же, может быть любым. В этом руководстве в качестве названия файла мы будем использовать «filename» (имя файла).
- Чтобы сохранить файл как .java, после имени файла напишите .java и выберите Все файлы в выпадающим меню выбора расширений.
- Запомните, куда вы сохранили файл.
- Если вы не знаете, как написать программу на Java, поищите дополнительное руководство об этом. Однако, чтобы научиться компилировать и запускать программы, можно использовать любую программу, написанную на Java.
-
2
Откройте Командную строку/Терминал. Доступ к командной строке немного отличается для Mac и Windows.
- Windows: нажмите Пуск, затем введите cmd. Чтобы открыть Командную строку, нажмите ↵ Enter.
- Mac: в Finder нажмите на вкладку Переход, выберите Программы, затем – Утилиты и кликните по Терминал.
-
3
-
4
Перейдите в нужную папку. Чтобы изменить рабочий каталог, используйте команду cd, а затем введите название каталога.
- Например, если вы сейчас находитесь в каталоге
C:\Users\Bob\Project
и хотите его изменить наC:\Users\Bob\Project\TitanProject
, введитеcd TitanProject
и нажмите ↵ Enter. - Если вы введете
dir
и нажмете ↵ Enter, то сможете увидеть список файлов, которые находятся в этом каталоге.
- Например, если вы сейчас находитесь в каталоге
-
5
Скомпилируйте программу. Как только вы окажетесь в нужном каталоге, можете скомпилировать программу – введите в командную строку
javac filename.java
и нажмите enter.- Если в вашей программе есть какие-либо ошибки или возникли трудности с компиляцией, командная строка вас об этом предупредит.
- Для получения дополнительной справки ознакомьтесь с нашей статьей о том, как исправить ошибки компилятора в Java.
-
6
Запустите программу. Введите
java filename
и нажмите ↵ Enter. Конечно же, замените «filename» именем вашего файла.- После нажатия ↵ Enter ваша программа должна запуститься. Если вы получили сообщение об ошибке или ваша программа не работает, используйте метод устранения ошибок.
Реклама
-
1
Установите путь. Если вы используете простую программу, файлы которой расположены в одном каталоге, вероятно, вам не нужно этого делать. Однако, если вы используете более сложную программу с файлами в нескольких каталогах, вам нужно будет указать компьютеру, где искать эти файлы.
-
Windows: в командной строке введите
java -version
и нажмите ↵ Enter. Основываясь на версии Java, указанной в первой строке, введите в командной строкеset path=%path%;C:\Program Files\Java\jdk1.5.0_09\bin
и нажмите ↵ Enter. Замените jdk1.5.0_09 версией Java, которая у вас установлена.- Вводите эту команду, когда будете находиться в каталоге с вашей программой Java.
-
Mac: чтобы убедиться, что у вас установлен Java, введите в терминале команду
/usr/libexec/java_home -v 1.7
и нажмите ↵ Enter. Затем введитеecho export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
и нажмите ↵ Enter. После этого перезапустите терминал.
-
Windows: в командной строке введите
Советы
- Опять же, важно, чтобы вы загрузили и установили Java JDK на свой компьютер. Ссылка для загрузки: http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Реклама
Об этой статье
Эту страницу просматривали 67 916 раз.
Была ли эта статья полезной?
You can actually run Java program as you would shell or python scripts without manually compile the Java file, as described in
JEP 330. That is available since JDK 11.
If you create a file testing
, and put the following you should be able to run it as command testing
. You need to make it executable in Linux and Mac OSX with chmod +x testing
.
#!/usr/bin/env java --source 11
public class Test {
public static void main(String [] args) {
System.out.println("Hello world!");
System.exit(0);
}
}
You are not allowed to use the file extension .java
in the previous example.
$ chmod +x testing
$ ./testing
Hello world!
$
But you can still execute if it is was name Test.java
without the shebang «#!» prefix like this:
public class Test {
public static void main(String [] args) {
System.out.println("Hello again!");
System.exit(0);
}
}
Then execute the file Test.java
with following command:
$ java Test.java
Hello again!
$
So this works as long as you have a new enough Java compiler in the path, check with java -version
. More information in this blog.
Время на прочтение
11 мин
Количество просмотров 630K
Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.
От простого к …
Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.
Один файл
Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Переходим в каталог, где лежит данный файл, и выполняем команды.
javac HelloWorld.java
В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить
java -classpath . HelloWorld
Отделяем бинарные файлы от исходников
Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем
javac -d bin src/HelloWorld.java
Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.
Запускаем
java -classpath ./bin HelloWorld
Используем пакеты
А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.
Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
package com.qwertovsky.helloworld;
В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем
javac -d bin src/com/qwertovsky/helloworld/HelloWorld.java
В каталоге bin автоматически создастся структура каталогов как и в src.
HelloWorld
'---bin
' '---com
' '---qwertovsky
' '---helloworld
' '---HelloWorld.class
'---src
'---com
'---qwertovsky
'---helloworld
'---HelloWorld.java
Запускаем
java -classpath ./bin com.qwertovsky.helloworld.HelloWorld
Если в программе несколько файлов
Изменим программу.
HelloWorld.java
package com.qwertovsky.helloworld;
public class HelloWorld
{
public static void main(String[] args)
{
int a=2;
int b=3;
Calculator calc=new Calculator();
System.out.println("Hello World!");
System.out.println(a+"+"+b+"="+calc.sum(a,b));
}
}
Calculator.java
package com.qwertovsky.helloworld;
import com.qwertovsky.helloworld.operation.Adder;
public class Calculator
{
public int sum(int... a)
{
Adder adder=new Adder();
for(int i:a)
{
adder.add(i);
}
return adder.getSum();
}
}
Adder.java
package com.qwertovsky.helloworld.operation;
public class Adder
{
private int sum;
public Adder()
{
sum=0;
}
public Adder(int a)
{
this.sum=a;
}
public void add(int b)
{
sum+=b;
}
public int getSum()
{
return sum;
}
}
Компилируем
javac -d bin src/com/qwertovsky/helloworld/HelloWorld.java
src\com\qwertovsky\helloworld\HelloWorld.java:9: cannot find symbol
symbol : class Calculator
location: class com.qwertovsky.helloworld.HelloWorld
Calculator calc=new Calculator();
^
src\com\qwertovsky\helloworld\HelloWorld.java:9: cannot find symbol
symbol : class Calculator
location: class com.qwertovsky.helloworld.HelloWorld
Calculator calc=new Calculator();
^
2 errors
Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
Компилируем
javac -sourcepath ./src -d bin src/com/qwertovsky/helloworld/HelloWorld.java
Запускаем
java -classpath ./bin com.qwertovsky.helloworld.HelloWorld
Hello Word
2+3=5
Если удивляет результат
Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.
javac -g -sourcepath ./src -d bin src/com/qwertovsky/helloworld/HelloWorld.java
Запускаем отладчик
jdb -classpath bin -sourcepath src com.qwertovsky.helloworld.HelloWorld
Initializing jdb ...
>
Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе Calculator
> stop at com.qwertovsky.helloworld.Calculator:9
Deferring breakpoint com.qwertovsky.helloworld.Calculator:9.
It will be set after the class is loaded.
Запускаем на выполнение.
> run
run com.qwertovsky.helloworld.HelloWorld
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint com.qwertovsky.helloworld.Calculator:9
Hello World!
Breakpoint hit: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=9 bci=0
9 Adder adder=new Adder();
Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.
main[1] list
5 public class Calculator
6 {
7 public int sum(int... a)
8 {
9 => Adder adder=new Adder();
10 for(int i:a)
11 {
12 adder.add(i);
13 }
14 return adder.getSum();
Узнаем, что из себя представляет переменная а.
main[1] print a
a = instance of int[2] (id=340)
main[1] dump a
a = {
2, 3
}
main[1] stop at com.qwertovsky.helloworld.operation.Adder:19
Deferring breakpoint com.qwertovsky.helloworld.operation.Adder:19.
It will be set after the class is loaded.
Продолжим исполнение.
main[1] cont
> Set deferred breakpoint com.qwertovsky.helloworld.operation.Adder:19
Breakpoint hit: "thread=main", com.qwertovsky.helloworld.operation.Adder.add(), line=19 bci=0
19 sum+=b;
main[1] list
15 }
16
17 public void add(int b)
18 {
19 => sum+=b;
20 }
21
22 public int getSum()
23 {
24 return sum;
main[1] print sum
sum = 0
main[1] print b
b = 2
Выполним код в текущей строке и увидим, что sum стала равняться 2.
main[1] step
>
Step completed: "thread=main", com.qwertovsky.helloworld.operation.Adder.add(), line=20 bci=10
20 }
main[1] print sum
sum = 2
Поднимемся из класса Adder в вызвавший его класс Calculator.
main[1] step up
>
Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=10 bci=36
10 for(int i:a)
Удаляем точку прерывания
main[1] clear com.qwertovsky.helloworld.operation.Adder:19
Removed: breakpoint com.qwertovsky.helloworld.operation.Adder:19
main[1] step
>
Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=12 bci=30
12 adder.add(i);
Можно избежать захода в методы, используя команду next.
main[1] next
>
Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=10 bci=36
10 for(int i:a)
main[1] next
>
Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=14 bci=42
14 return adder.getSum();
Проверяем значение выражения и завершаем выполнение.
main[1] eval adder.getSum()
adder.getSum() = 5
main[1] cont
> 2+3=5
The application exited
Хорошо бы протестировать
Используем JUnit.
package com.qwertovsky.helloworld;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized.Parameters;
@RunWith(value=org.junit.runners.Parameterized.class)
public class TestCalculator
{
int expected;
int[] arg;
@Parameters
public static Collection<int[][]> parameters()
{
return Arrays.asList(new int[][][]{
{{4}, {2, 2}}
,{{-1},{4, -5}}
,{{0},{0,0,0}}
,{{0},{}}
});
}
public TestCalculator(int[] expected, int[] arg)
{
this.expected=expected[0];
this.arg=arg;
}
@Test
public void testSum()
{
Calculator c=new Calculator();
assertEquals(expected,c.sum(arg));
}
}
Компилируем
mkdir test_bin
javac -classpath lib/path/junit-4.8.2.jar -sourcepath ./src -d test_bin test/com/qwertovsky/helloworld/TestCalculator.java
Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ‘;’, в Linux — ‘:’. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ‘;’, но он воспринимается как разделитель команд.
java -classpath lib/path/junit-4.8.2.jar:./test_bin org.junit.runner.JUnitCore com.qwertovsky.helloworld.TestCalculator
JUnit version 4.8.2
....
Time: 0,031
OK (4 tests)
Создадим библиотеку
Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.
HelloWorld
'---bin
'---src
'---com
'---qwertovsky
'---helloworld
'---HelloWorld.java
Сalculator
'---bin
'---src
' '---com
' '---qwertovsky
' '---calculator
' '---Calculator.java
' '---operation
' '---Adder.java
'---test
'---com
'---qwertovsky
'---calculator
'---TestCalculator.java
Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку
import com.qwertovsky.calculator.Calculator;
Компилируем.
cd Calculator
javac -sourcepath src -d bin src/com/qwertovsky/calculator/Calculator.java
Делаем архив jar
jar cvf calculator.jar -C bin .
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/qwertovsky/(in = 0) (out= 0)(stored 0%)
adding: com/qwertovsky/calculator/(in = 0) (out= 0)(stored 0%)
adding: com/qwertovsky/calculator/Calculator.class(in = 497) (out= 373)(deflated 24%)
adding: com/qwertovsky/calculator/operation/(in = 0) (out= 0)(stored 0%)
adding: com/qwertovsky/calculator/operation/Adder.class(in = 441) (out= 299)(deflated 32%)
С помощью ключа -C мы запустили программу в каталоге bin.
Надо узнать, что у библиотеки внутри
Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.
javap -c -classpath calculator.jar com.qwertovsky.calculator.Calculator
Compiled from "Calculator.java"
public class com.qwertovsky.calculator.Calculator extends java.lang.Object{
public com.qwertovsky.calculator.Calculator();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public int sum(int[]);
Code:
0: new #2; //class com/qwertovsky/calculator/operation/Adder
3: dup
4: invokespecial #3; //Method com/qwertovsky/calculator/operation/Adder."<init>":()V
7: astore_2
8: aload_1
9: astore_3
10: aload_3
11: arraylength
12: istore 4
14: iconst_0
15: istore 5
17: iload 5
19: iload 4
21: if_icmpge 42
24: aload_3
25: iload 5
27: iaload
28: istore 6
30: aload_2
31: iload 6
33: invokevirtual #4; //Method com/qwertovsky/calculator/operation/Adder.add:(I)V
36: iinc 5, 1
39: goto 17
42: aload_2
43: invokevirtual #5; //Method com/qwertovsky/calculator/operation/Adder.getSum:()I
46: ireturn
}
Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).
javap -private -classpath calculator.jar com.qwertovsky.calculator.operation.Adder
Compiled from "Adder.java"
public class com.qwertovsky.calculator.operation.Adder extends java.lang.Object{
private int sum;
public com.qwertovsky.calculator.operation.Adder();
public com.qwertovsky.calculator.operation.Adder(int);
public void add(int);
public int getSum();
}
Лучше снабдить библиотеку документацией
Изменим для этого класс калькулятора.
package com.qwertovsky.calculator;
import com.qwertovsky.calculator.operation.Adder;
/**
* Калькулятор, который умеет складывать
* @author Qwertovsky
*
*/
public class Calculator
{
/**
* Определение суммы слагаемых
* @param a массив слагаемых
* @return сумма
*/
public int sum(int... a)
{
Adder adder=new Adder();
for(int i:a)
{
adder.add(i);
}
return adder.getSum();
}
}
Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.
mkdir doc
javadoc -d doc -charset utf-8 -sourcepath src -author -subpackages com.qwertovsky.calculator
В результате получиться следующее
Можно подписать jar-архив
Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.
keytool -genkey -keyalg rsa -keysize 2048 -alias qwertokey -keystore path/to/qwerto.keystore
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: Valery Qwertovsky
What is the name of your organizational unit?
[Unknown]: Qwertovsky
What is the name of your organization?
[Unknown]: Qwertovsky
What is the name of your City or Locality?
[Unknown]: Tver
What is the name of your State or Province?
[Unknown]: Tverskaya obl.
What is the two-letter country code for this unit?
[Unknown]: RU
Is CN=Valery Qwertovsky, OU=Qwertovsky, O=Qwertovsky, L=Tver, ST=Tverskaya obl., C=RU correct?
[no]: y
Enter key password for <qwertokey>
(RETURN if same as keystore password):
Re-enter new password:
Генерируем Certificate Signing Request (CSR)
keytool -certreq -file path/to/qwertokey.crt -alias qwertokey -keystore path/to/qwerto.keystore
Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище
keytool -import -trustcacerts -keystore path/to/qwert.keystore -alias qwertokey -file path/to/qwertokey.cer
Подписываем jar-архив
jarsigner -keystore path/to/qwerto.keystore calculator.jar qwertokey
Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так
jarsigner -verify -verbose -certs -keystore path/to/qwerto.keystore calculator.jar
Использование библиотеки
Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
Компилируем
cd HelloWorld
javac -sourcepath src -d bin -classpath path/to/calculator.jar src/com/qwertovsky/helloworld/HelloWorld.java
Запускаем
java -classpath bin:path/to/calculator.jar com.qwertovsky.helloworld.HelloWorld
Собираем программу
Это можно сделать по-разному.
Первый способ
cd HelloWorld
echo main-class: com.qwertovsky.helloworld.HelloWorld>manifest.mf
echo class-path: lib/calculator.jar >>manifest.mf
mkdir lib
cp path/to/calculator.jar lib/calculator.jar
jar -cmf manifest.mf helloworld.jar -C bin .
Здесь есть тонкости.
В строке
main-class: com.qwertovsky.helloworld.HelloWorld
не должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».
При использовании команды echo надо следить только за пробелом в конце строки с main-class.
Второй способ
cd HelloWorld
echo class-path: lib/calculator.jar >manifest.mf
mkdir lib
cp path/to/calculator.jar lib/calculator.jar
jar -cmef manifest.mf com.qwertovsky.helloworld.HelloWorld helloworld.jar -C bin .
В данном способе избегаем ошибки с пробелом в main-class.
Третий способ
cd HelloWorld
mkdir lib
cd lib
jar -xvf path/to/calculator.jar com/
created: com/
created: com/qwertovsky/
created: com/qwertovsky/calculator/
inflated: com/qwertovsky/calculator/Calculator.class
created: com/qwertovsky/calculator/operation/
inflated: com/qwertovsky/calculator/operation/Adder.class
cd ..
cp -r bin/* lib/
jar -cef com.qwertovsky.helloworld.HelloWorld helloworld.jar -C lib .
rm -r lib
Включили код нужной библиотеки в исполняемый файл.
Запуск исполняемого jar-файла
Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.
cd Calculator
ls ../HelloWorld/lib
calculator.jar
java -jar ../HelloWorld/helloworld.jar
При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.
java -jar ../HelloWorld/helloworld.jar
Как быть с приложениями JavaEE
Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее
javac -classpath path/to/jboss/common/lib/jboss-servlet*.jar -d ./classes src/com/qwertovsky/app/servlets/MenuSt.java
Структура архива JavaEE-приложения должна соответствовать определенному формату. Например
my.ear
`---META-INF
| `---manifest.mf
`---lib
| `---mylib.jar
`---my.war
| `---META-INF
| | `---manifest.mf
| `---WEB-INF
| | `---lib
| | | `---myweblib.jar
| | `---classes
| | | `---com
| | | `---...
| | `---web.xml
| `---index.html
| `---<остальное веб-содержимое (страницы, изображения)>
`---myejb.jar
Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.
Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».
Ещё почитать
1. Elliotte Rusty Harold. «Рекомендации по управлению classpath в UNIX и Mac OS X»
2. Elliotte Rusty Harold. «Рекомендации по управлению classpath в Windows»
3. Евгений Матюшкин aka Skipy. «Ликбез»
4. Lesson: Packaging Programs in JAR Files
5. Brian Goetz. «Теория и практика Java: Мне нужно задокументировать ЭТО?»
6. Евгений Матюшкин aka Skipy. «Создание собственных тегов javadoc»
7. Создание и использование архивов Java
8. Sun Java Signing
9. javac — Java programming language compiler
10. java — the Java application launcher
11. jdb — The Java Debugger
12. javap — The Java Class File Disassembler
13. javadoc — The Java API Documentation Generator
14. jarsigner — JAR Signing and Verification Tool
15. jar — The Java Archive Tool
16. keytool — Key and Certificate Management Tool
Download Article
Download Article
While many programming environments will allow you to compile and run a program within the environment, you can also compile and run using Command Prompt. Both Windows and Mac have their own versions of Command Prompt, although it is technically called Terminal on the Mac OS. The process is essentially identical for Windows and Mac.
-
1
Save the program. After using a text editor, such as NotePad, to create your Java program, save the program with a .java extension. Of course, the file name can be anything. For the purposes of this tutorial, «filename» will be used as a placeholder for your file name.
- To ensure that your file is saved as a .java file, be sure to write .java after the file name, and select All Files from the dropdown extension menu.
- Make note of where you saved the file on your system.
- If you are unsure of how to write a program in Java, check out our tutorial on how to program in Java. For the purposes of learning how to compile and run a program, though, you can use any sort of Java program.
-
2
Open Command Prompt/Terminal. Accessing the command line differs slightly for Mac and Windows.
- Windows: Press ⇱ Home, then type cmd. Press ↵ Enter to open the Command Prompt.
- Mac: In Finder, press the Go tab, select Applications, select Utilities, then select Terminal.
Advertisement
-
3
Check that Java is installed. Type
java -version
into your command line. If java is installed, you will see a message stating what version of Java is currently installed.- If not, you may need to install the Java Development Kit from their website. It is free and can be found at this link: http://www.oracle.com/technetwork/java/javase/downloads/index.html.
-
4
Navigate to the correct folder. Use the command cd followed by the directory name to change your working directory.
- For example, if you were operating in
C:\Users\Bob\Project
and wanted to get toC:\Users\Bob\Project\TitanProject
, enter incd TitanProject
and press ↵ Enter. - You can see a list of what is in your current directory by typing
dir
and pressing ↵ Enter.
- For example, if you were operating in
-
5
Compile the program. Once you are in the correct directory, you can compile the program by typing
javac filename.java
into the command line and pressing enter.- If you have any errors in your program, or if there is difficultly compiling, the command prompt will notify you.
- Check out our article about how to fix compiler errors in Java for more help.
-
6
Run the program. Enter in
java filename
and press ↵ Enter. Of course, replace «filename» with whatever the name of your file actually is.- After pressing ↵ Enter, your program should run. If you receive an error, or if your program fails to run in any way, refer to the troubleshooting method.
Advertisement
-
1
Set your path. If you are running a simple program with all of the files in the same directory, you will probably not need to do this. However, if you are running a more complex program with files in multiple directories, you will need to tell the computer where to look for these files.
-
Windows: Type
java -version
into the command prompt and press ↵ Enter. Based off the version of Java displayed on the first line, type inset path=%path%;C:\Program Files\Java\jdk1.5.0_09\bin
to the command prompt and press ↵ Enter. Substitute jdk1.5.0_09 with whatever version of Java you have installed.- Be sure you are entering in this command while in the directory containing your Java project.
-
Mac: Type
/usr/libexec/java_home -v 1.7
into the terminal and press ↵ Enter to ensure Java is installed on your system. Then, typeecho export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
into the terminal and press ↵ Enter. Restart the terminal afterwards.
-
Windows: Type
Add New Question
-
Question
What would I do if I type in the Java filename.java and it is not running? The code written in Notepad is correct.
It is okay. You have to write for compiling : javac filename.java and for running: just filename.
-
Question
How can I compile using CMD?
Once you are in the correct directory, you can compile the program by typing «javac filename.java» into the command line and pressing enter.
-
Question
How can I hack a computer using the command prompt?
You can’t without installing other things. CMD is NOT for hacking and should never be used for it.
See more answers
Ask a Question
200 characters left
Include your email address to get a message when this question is answered.
Submit
Advertisement
About This Article
Article SummaryX
1. Type ″cmd″ into Windows search.
2. Right-click Command prompt.
3. Click Run as administrator.
4. Type ″cd \path\to\java\program″.
5. Press Enter.
6. Type ″javac -filename.java″.
7. Press Enter.
8. Type ″java filename.java″.
9. Press Enter.
Did this summary help you?
Thanks to all authors for creating a page that has been read 960,490 times.
Is this article up to date?
Последнее обновление: 22.11.2022
Итак, после установки JDK создадим первое приложение на языке Java. Что необходимо для создания программы на Java? Прежде всего нам надо написать код программы, и для этого нужен текстовый редактор.
Можно использовать любой текстовый редактор, например, Notepad++.
И чтобы превратить код программы в исполняемое приложение необходим компилятор. После установки JDK все файлы по умолчанию помещаются в каталог C:\Program Files\Java\jdk-[номер_версии] (при использовании ОС Windows).
В моем случае это каталог C:\Program Files\Java\jdk-19. Если мы откроем в нем подкаталог bin, то мы сможем увидеть в нем ряд утилит.
Нас прежде всего интересует утилита компилятора javac. Чтобы скомпилировать класс программы, нам надо передать ее код этому компилятору.
Также следует отметить другую утилиту из этой папки — java.exe, которая позволяет запускать скомпилированную программу.
Итак, создадим на жестком диске какой-нибудь каталог, в котором будут располагаться файлы с исходным кодом на языке Java. Допустим, это будет каталог
C:/Java. Затем создадим в этом каталоге текстовый файл, который переименуем в Program.java.
Откроем этот файл в любом текстовом редакторе и наберем в нем следующую программу:
public class Program{ public static void main (String args[]){ System.out.println("Hello Java!"); } }
Java является объектно-ориентированным языком, поэтому вся программа представляется в виде набора взаимодействующих классов.
В данном случае определен один класс Program.
При определении класса вначале идет модификатор доступа public, который указывает, что данный класс будет доступен
всем, то есть мы сможем его запустить из командной строки. Далее идет ключевое слово
class, а затем название класса. То есть класс называется Program. После названия в фигурных скобках расположено содержимое класса.
Класс может содержать различные переменные и методы. В данном случае у нас объявлен один метод main.
Это главный метод в любой программе на Java, он является входной точкой программы и с него начинается все управление. Он обязательно
должен присутствовать в программе.
Метод main также имеет модификатор public
. Слово static
указывает, что метод main — статический, а слово void
— что он не возвращает никакого значения. Позже
мы подробнее разберем, что все это значит.
Далее в скобках у нас идут параметры метода — String args[]
— это массив args, который хранит значения типа String
, то
есть строки. В данном случае ни нам пока не нужны, но в реальной программе это те строковые параметры, которые передаются при запуске программы из
командной строки.
После списка параметров в фигурных скобках идет тело метода — это собственно те инструкции, которые и будет выполнять метод.
В данном случае фактически определени определена только одна инструкция — вывод на консоль некоторой строки. Для вывода на консоль используется встроенный метод
System.out.println()
. В этот метод передается выводимая строка. Каждая инструкция завершается точкой с запятой.
Теперь скомпилируем написанную программу. Откроем командную строку (в Windows) или терминал в Linux/MacOS и введем там соответствующие команды. Первым делом перейдем в каталог, где лежит наш файл с программой с помощью команды:
В данном случае файл находится в каталоге C:\Java.
Затем cкомпилируем программу с помощью команды
C:\Java>"C:\Program Files\Java\jdk-19\bin\javac" Program.java
Обратите внимание, что весь путь к компилятору javac берется в кавычки, а затем через пробел идет название нашего файла, который содержит
класс программы.
После этого программа компилируется в байт-код, и в каталоге C:\Java можно будет найти новый файл Program.class.
Это и будет файл с байт-кодом программы. Теперь нам надо его запустить с помощью утилиты java:
C:\Java>"C:\Program Files\Java\jdk-19\bin\java" Program
Здесь уже расширение у файла не надо использовать.
Для ОС Windows весь процесс будет выглядеть следующим образом:
Добавление java в переменную Path
Для компиляции приходится вводить полный путь к комилятору javac, что может быть сопряжено с ошибками при вводе, да и каждый раз вводить полный путь тоже неудобно.
Чтобы в дальнейшем облегчить работу, добавим путь к JDK в переменную PATH в переменных среды. Если мы работаем в Windows, то для добавления переменной среды
через поиск найдем найдем параметр Изменение системных переменных среды. Для этого введем в поле поиска «Изменение системных переменных среды»:
Выберем пункт Изменение системных переменных среды. И сначала нам откроется окно «Свойства системы», где нажмем на кнопку
Переменные среды:
Затем нам откроется окно, где мы можем увидеть все переменные среды.
(Также можно перейти через Параметры и пункт Система ->Дополнительные параметры системы ->Переменные среды)
Здесь нам нужно исправить системную переменную Path. Для этого выделим ее и нажмем на кнопку «Изменить»:
В эту переменную Path нам надо добавить путь к инструментам JDK. И тут есть два момента.
Во-первых, при установке jdk по умолчанию ряд утилит также устанавливаются в папку C:\Program Files\Common Files\Oracle\Java\javapath. В том числе это такие файлы как
java.exe и javac.exe. И путь к этой папке по умолчанию добавляется в перемнную Path. То есть мы можем использовать этот путь.
Второй момент — в последних сборках Windows компания Microsoft также устанавливает свои сборки JDK, точнее OpenJDK, которые также по умолчанию добавляются в переменную Path
и которые мы также можем использовать. Но у этих сборок есть большой минус — они применяют одну из прошлых версий JDK (обычно это LTS-сборки). Например, в моем случае это 11-я версия,
но текущая версия может отличаться (например, на написание данной статьи текущей являлась версия 19).
Чтобы использовать последнюю версию среди путей в переменной Path убедимся, что путь C:\Program Files\Common Files\Oracle\Java\javapath располагается выше
путей к сборкам JDK от Microsoft. Для перемещения определенного пути вверх среди переменных среды можно использовать кнопку «Вверх:
Также можно напрямую использовать путь к JDK.
Для создания новой переменной надо нажать на кнопку «Создать» и ввести в новое поле путь «C:\Program Files\Java\jdk-[номер_версии]\bin». Но опять же его следуется с помощью кнопки Вверх поместить
над путями к OpenJDK от Microsoft.
После установки переменной Path перейдем к командной строке/терминалу (в более старых версиях Windows может потребоваться перезауск командной строки) и для проверки версии введем команду
Консоль нам должна в ответ ввести номер только что установленной версии JDK (в моем случае 19-й версии):
java version "19.0.1" 2022-10-18 Java(TM) SE Runtime Environment (build 19.0.1+10-21) Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
И после этого можно вводить только названия утилит без полных путей: