Отдельная благодарность Sotnikov Maksim за тестирование на macOS и идею с флагом
--no-copy
/-nc
Здесь представлена инструкция, являющийся продолжением другой инструкции, дополненная лишь ещё несколькими методами запуска преимущественно на операционной системе Windows. Однако скрипты, которые приведенные далее в инструкции, могут подойти и для других систем. Ниже приведены следующие виды запусков на ОС Windows:
- компиляция и запуск через классы на Windows (локально);
- компиляция на Windows и запуск через классы на Ubuntu (по SSH-ключу);
- компиляция и запуск через тестирующие
jar
-файлы на Windows (локально, git bash); - компиляция и запуск через тестирующие
jar
-файлы на подсистеме Windows для Linux (локально, terminal).
Работоспособность скриптов были проверены на Windows 10 (последней версии), Linux (Ubuntu 22.04) и macOS 14.0
- Скачайте и установите JetBrains Intellij IDEA и JDK17+.
- Создайте пустой проект java-advanced (здесь и далее будем считать, что проект имеет такое название).
- Склонируйте Git-репозитории.
- Пометьте директории проекта.
- Импортируйте библиотеку и модули.
- Зайдите в структуру проекта (
File
->Project Structure...
). - Во вкладке
Project Settings
выберитеLibraries
. - Во вкладке
Project Settings
выберитеModules
.- Выберите под наименованием модуля
Dependencies
. - Нажмите на верхний плюсик.
- В появившемся окне нажмите
Import Module
. - Выберите директорию
tests/modules/info.kgeorgiy.java.advanced.base
. - В появляющихся окнах подтвердите создание.
- Добавьте еще один модуль
tests/modules/info.kgeorgiy.java.advanced.walk
и повторите действия пунктовa
-e
.
- Выберите под наименованием модуля
- For future: Все остальные модули добавляются также по предыдущему пункту.
- Зайдите в структуру проекта (
- Настройте зависимости модулей.
- Настройка базового модуля.
- Настройка модуля первого домашнего задания.
- Настройка общего модуля.
- For future: Все остальные модули добавляются также по пунктам
ii
иiii
. Обратите внимание: для некоторых модулей понадобятся другие модули, помимоinfo.kgeorgiy.java.advanced.base
.
- Добавьте конфигурацию запуска.
- В поле Name введите название конфигурации, например, ClassWalkTestWindows, где префикс Class означает, что тесты компилируются и запускаются через классы; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс Windows - тесты проходят на Windows.
- В поле
module not specified
выберите версию JDK. - В поле
-cp <no module>
выберите модульjava-advanced
. - В поле Main class введите полное название класса тестирования, например, info.kgeorgiy.java.advanced.walk.Tester.
- В поле Program arguments введите первым аргументом версию домашнего задания, вторым - полное название разработанного класса, например, Walk info.kgeorgiy.ja.bakturin.walk.Walk.
-
Скачайте и установите VirtualBox и скачайте образ диска Ubuntu Server.
-
Установка операционной системы Ubuntu Server.
- Создание новой машины,
New
. - Далее нажимаете всё время
Next
. Из интересного стоит отметить, что количество места для операционной системы - хватает и 10 ГБ (утверждается, что можно поставить чуть поменьше). Также, по умолчанию, на операционную систему будет приходиться 1 ГБ оперативной памяти. - Настройка виртуальной машины,
Settings
. В разделе Storage, в Empty нажмите на значок диска - Choose a disk file - выберите скачанный.iso
. - Запуск виртуальной машины.,
Start
. В разделе Guided storage configuration рекомендуется убрать пунктSet up this disk as an LVM group
. - Во всех оставшихся разделах нажимаете всё время
Next
, создайте пользователя и ничего лишнего не выбирайте для экономия места и времени.
- Создание новой машины,
-
Обновление операционной системы. Введите в терминале следующее:
sudo apt-get update sudo apt-get upgrade -y
-
Установите все необходимые для дальнейшей работы зависимости:
sudo apt-get install -y openjdk-17-jdk-headless net-tools openssh-server
-
Выключите виртуальную систему (желательно, через команду
poweroff
) и зайдите в настройки: в разделе Network перед Attached to разверните список и выберитеHost-only Adapter
, это нужно, для того, чтобы IP-адрес, по которому будет якобы располагаться наш сервер, никогда не менялся, при этом, доступ к Интернету на виртуальной машине Вы потеряете. -
Запустите машину и после входа в терминал введите следующее
ifconfig
Чуть ниже на одну строку и левее надписи
enp0s3
Вы увидите IP-адрес после надписиinet
. Запомните его. -
Добавьте конфигурацию запуска.
- В поле Name введите название конфигурации, например, ClassWalkTestLinux, где префикс Class означает, что тесты компилируются и запускаются через классы; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс Linux - тесты проходят на Linux (Ubuntu Server).
- Напротив Run on выберите
SSH
.- В появившемся окне, в поле Host введите IP-адрес виртуальной машины, в поле Username - заданный на этапе установки системы username для входа в систему.
- Если появилось окно, что до SSH-сервера якобы нельзя достучаться, значит, есть шанс, что Вы всё сделали правильно.
- В поле Password введите пароль от username для входа в систему.
- После успешной проверки наличия JDK нажмите
Next
. - Установите себе все необходимые директории или оставьте по умолчанию.
- В поле
module not specified
выберите версию JDK. - В поле
-cp <no module>
выберите модульjava-advanced
. - В поле Main class введите полное название класса тестирования, например, info.kgeorgiy.java.advanced.walk.Tester.
- В поле Program arguments введите первым аргументом версию домашнего задания, вторым - полное название разработанного класса, например, Walk info.kgeorgiy.ja.bakturin.walk.Walk.
-
Для запуска системы JRunner без интерфейса можно воспользоваться скриптом
JRunner.cmd
. Обратите внимание, что в скрипте в качестве пути к программе выбран путь по умолчанию.
- Скачайте и установите Git Bash.
- Добавьте в директорию проекта скрипт
Test.sh
. - Отредактируйте файл под Вашу настройку проекта:
- В поле
SOLUTIONS
введите путь-директорию к персональному репозиторию, то есть тот, по которому лежитjava-solutions
. - В поле
TESTS
введите путь-директорию к репозиторию с тестами, то есть тот, по которому лежатartifacts/
,lib/
,modules/
. - В поле
SURNAME
введите Вашу фамилию, то есть то, что Вы подставляли вместо __last_name__.
- В поле
- Добавьте конфигурацию запуска.
- В поле Name введите название конфигурации, например, JarWalkTestGitBash, где префикс Jar означает, что тесты компилируются и запускаются через
.jar
; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс GitBash - тесты проходят через приложение Git Bash. - В поле
Script path
укажите путь до файла Test.sh. - В поле
Script options
укажите аргументы к скрипту:- Название пакета, в котором лежит Ваше решение домашнего задания.
- Название пакета, в котором лежат тесты к домашнему заданию.
- Чистое название класса, являющийся Вашим решением домашнего задания, то есть, например,
Walk
илиRecursiveWalk
. - Название версии тестирования домашнего задания (easy/hard/bonus).
- Также скрипт поддерживает режим с пятью аргументами, об этом Вы можете прочитать здесь.
- В поле Name введите название конфигурации, например, JarWalkTestGitBash, где префикс Jar означает, что тесты компилируются и запускаются через
- Дополнительную информацию по работе скрипта Test.sh Вы можете прочитать здесь.
-
Активируйте компоненты Windows.
- Откройте Панель управления - Все элементы панели управления - Программы и компоненты - Включение и отключение компонентов Windows.
- В списке найдите пункт Подсистема Windows для Linux и убедитесь, что перед пунктом стоит галочка. В ином случае: поставьте, сохраните изменения и перезагрузите компьютер.
-
В Microsoft Store установите приложение Подсистема Windows для Linux.
-
Запустите терминал/командную строку, введите следующее ниже и перезагрузите компьютер:
wsl.exe --update wsl.exe --set-default-version 2
-
По пути домашнего каталога текущего пользователя должен появиться файл
.wslconfig
, в котором лежат основные глобальные настройки для WSL2. Содержимое.wslconfig
предлагается установить следующим:[wsl2] nestedVirtualization=true memory=512MB processors=2
Первые две строки должны быть по умолчанию после установки версии WSL на 2. Значение
memory
ограничивает подсистеме использование оперативной памяти,processors
, соответственно, на количество процессоров. -
Запустите терминал/командную строку и установите Ubuntu 20.04.6 LTS с помощью следующей команды:
wsl.exe --install Ubuntu-20.04
Альтернативным вариантом Вы можете установить приложение с Microsoft Store.
-
Запустите дистрибутив (это можно сделать, введя в терминал/командную строку
wsl
), проследуйте инструкциям установки и введите в терминал WSL:sudo apt-get update sudo apt-get upgrade -y sudo apt-get install -y openjdk-17-jdk-headless
-
Добавьте в директорию проекта скрипты
Test.sh
иTestWSL.cmd
. -
Отредактируйте файл под Вашу настройку проекта:
- В поле
SOLUTIONS
введите путь-директорию к персональному репозиторию, то есть тот, по которому лежитjava-solutions
. - В поле
TESTS
введите путь-директорию к репозиторию с тестами, то есть тот, по которому лежатartifacts/
,lib/
,modules/
. - В поле
SURNAME
введите Вашу фамилию, то есть то, что Вы подставляли вместо __last_name__.
- В поле
-
Добавьте конфигурацию запуска.
- В поле Name введите название конфигурации, например, JarWalkTestWSL, где префикс Jar означает, что тесты компилируются и запускаются через
.jar
; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс WSL - тесты проходят через подсистему. - В поле
Script path
укажите путь до файла TestWSL.cmd. - В поле
Script options
укажите аргументы к скрипту:- Название пакета, в котором лежит Ваше решение домашнего задания.
- Название пакета, в котором лежат тесты к домашнему заданию.
- Чистое название класса, являющийся Вашим решением домашнего задания, то есть, например,
Walk
илиRecursiveWalk
. - Название версии тестирования домашнего задания (easy/hard/bonus).
- Также скрипт поддерживает режим с пятью аргументами, об этом Вы можете прочитать здесь.
- В поле Name введите название конфигурации, например, JarWalkTestWSL, где префикс Jar означает, что тесты компилируются и запускаются через
-
Дополнительную информацию по работе скрипта Test.sh Вы можете прочитать здесь.
В этой части описан принцип работы основного и .cmd скриптов тестирования. При запуске с четырьмя параметрами в корневой папке создается каталог, если ещё не был создан, jar-runner/
, внутри которого создается ещё один подкаталог с названием, соответствующий времени и дате запуска скрипта в следующем формате:
date '+%d-%m-%Y_%H-%M-%S'
В данный подкаталог копируется файлы решения домашнего задания по заданному через аргументы package, а также все файлы .java-тестов/библиотек/.jar-тестов. Пример:
jar-runner
└────────────24-06-2023_12-42-09
| hamcrest-core-1.3.jar
| info.kgeorgiy.java.advanced.base.jar
| info.kgeorgiy.java.advanced.walk.jar
| jsoup-1.8.1.jar
| jsoup-1.8.1.jar
| module-info.java
| quickcheck-0.6.jar
|
├────info
| └──────kgeorgiy
| ├──────────ja
| | └────bakturin
| | └──────────walk
| | Walk.java
| | RecursiveWalk.java
| └──────────java
| └────advanced
... ...
После копирования начинается компиляция с флажками, указывающие на библиотеки и кодировку UTF-8. После компиляции тесты запускаются так, как описано в репозитории курса с дополнительным флажком кодировки:
java -Dfile.encoding=UTF-8 -cp . -p . -m <тестовый модуль> <вариант> <полное имя класса>
После успешного или неудачного прохождения тестов в зависимости от интерпретатора shell, в котором запускался скрипт, Вам может быть предложено нажать на любую клавишу - это актуально только для приложений на базе msys
и cygwin
, так как без ожидания ввода от пользователя, приложение мгновенно закрывается.
В качестве единственного опционального флажка для скрипта предлагается --no-copy
/-nc
, который подается пятым аргументом. Было замечено, что каталог jar-runner/
быстро растет в занимаемом дисковом пространстве, поэтому предлагается альтернативный вариант запуска. Отличие в том, что файлы решения домашнего задания, а также все необходимые файлы для тестирование копируются напрямую в каталог jar-runner/
. Пример:
jar-runner
| hamcrest-core-1.3.jar
| info.kgeorgiy.java.advanced.base.jar
| info.kgeorgiy.java.advanced.walk.jar
| jsoup-1.8.1.jar
| jsoup-1.8.1.jar
| module-info.java
| quickcheck-0.6.jar
|
├────info
| └──────kgeorgiy
| ├──────────ja
| | └────bakturin
| | └──────────walk
| | Walk.java
| | RecursiveWalk.java
| └──────────java
| └────advanced
... ...
С данным флагом размер каталога jar-runner/
теперь будет зависть только от размера исходного и скомпилированного кода решения домашнего задания.