• Добро пожаловать на сайт - Forumteam.wiki !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

Работа с java в командной строке

Amoral Nismo

Игровой Публикатор
Публикатор
Регистрация
18.10.20
Сообщения
426
Реакции
102
Баллы
560
FTC
34¢
Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.


Можно подписать 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 Вам больше нравится?».
 
Сверху Снизу