Skip to content
This repository has been archived by the owner on Sep 16, 2023. It is now read-only.

sfbakturin/java-advanced-windows-setup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-advanced-windows-setup

Отдельная благодарность 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

Настройка под Windows

Компиляция и запуск через классы на Windows

  1. Скачайте и установите JetBrains Intellij IDEA и JDK17+.
  2. Создайте пустой проект java-advanced (здесь и далее будем считать, что проект имеет такое название).
    • В поле Name введите название проекта.
    • В поле Location выберете место, куда Вы хотите положить проект.
    • В Language выставите, если не выставлено, Java.
    • В Build system выставите, если не выставлено, Intellij.
    • Снимите галочку с Add sample code.
    • В созданном проекте удалите директорию src/. alt text
  3. Склонируйте Git-репозитории.
    • Зайдите в директорию проекта.
    • C командной строки склонируйте Git-репозиторий с тестами и персональный репозиторий.
    • Для удобства переименуйте репозиторий с тестам в tests/, персональный же - solutions/ (здесь и далее будем считать, что директории называются именно так). alt text
  4. Пометьте директории проекта.
    • Директорию tests/lib/ пометьте как Resources Root. alt text
    • Директорию solutions/java-solutions/ - Sources Root.
  5. Импортируйте библиотеку и модули.
    • Зайдите в структуру проекта (File -> Project Structure...).
    • Во вкладке Project Settings выберите Libraries.
      • Нажмите на плюсик.
      • В появившемся окне нажмите Java. alt text
      • Выберите директорию tests/lib/.
      • В появившемся окне нажмите OK. alt text
    • Во вкладке Project Settings выберите Modules.
      1. Выберите под наименованием модуля Dependencies.
      2. Нажмите на верхний плюсик.
      3. В появившемся окне нажмите Import Module. alt text
      4. Выберите директорию tests/modules/info.kgeorgiy.java.advanced.base.
      5. В появляющихся окнах подтвердите создание.
      6. Добавьте еще один модуль tests/modules/info.kgeorgiy.java.advanced.walk и повторите действия пунктов a-e.
    • For future: Все остальные модули добавляются также по предыдущему пункту.
  6. Настройте зависимости модулей.
    1. Настройка базового модуля.
      • Выберите модуль info.kgeorgiy.java.advanced.base.
      • В окне правее нажмите плюсик.
      • В появившемся окне нажмите Library. alt text
      • Выберите добавленный ранее lib.
    2. Настройка модуля первого домашнего задания.
      • Выберите модуль info.kgeorgiy.java.advanced.walk.
      • В окне правее нажмите плюсик.
      • В появившемся окне нажмите Library.
      • Выберите добавленный ранее lib.
      • Нажмите снова на плюсик и выберите Module Dependency.... alt text
      • В появившемся окне выберите модуль info.kgeorgiy.java.advanced.base.
    3. Настройка общего модуля.
      • Выберите модуль java-advanced.
      • Добавьте в зависимости все существующие модули, кроме модуля info.kgeorgiy.java.advanced.base, иначе будут проблемы при компиляции. alt text
    4. For future: Все остальные модули добавляются также по пунктам ii и iii. Обратите внимание: для некоторых модулей понадобятся другие модули, помимо info.kgeorgiy.java.advanced.base.
  7. Добавьте конфигурацию запуска.
    • В поле 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. alt text

Компиляция на Windows и запуск через классы на Ubuntu

  1. Скачайте и установите VirtualBox и скачайте образ диска Ubuntu Server.

  2. Установка операционной системы Ubuntu Server.

    • Создание новой машины, New.
      • В поле Name введите имя машины, например, JRunner.
      • В поле Type выберите тип Linux.
      • В поле Version выставите Ubuntu (64-bit) или Ubuntu (32-bit). alt text
    • Далее нажимаете всё время Next. Из интересного стоит отметить, что количество места для операционной системы - хватает и 10 ГБ (утверждается, что можно поставить чуть поменьше). Также, по умолчанию, на операционную систему будет приходиться 1 ГБ оперативной памяти.
    • Настройка виртуальной машины, Settings. В разделе Storage, в Empty нажмите на значок диска - Choose a disk file - выберите скачанный .iso. alt text
    • Запуск виртуальной машины., Start. В разделе Guided storage configuration рекомендуется убрать пункт Set up this disk as an LVM group. alt text
    • Во всех оставшихся разделах нажимаете всё время Next, создайте пользователя и ничего лишнего не выбирайте для экономия места и времени. alt text
  3. Обновление операционной системы. Введите в терминале следующее:

    sudo apt-get update
    sudo apt-get upgrade -y
  4. Установите все необходимые для дальнейшей работы зависимости:

    sudo apt-get install -y openjdk-17-jdk-headless net-tools openssh-server

    alt text

  5. Выключите виртуальную систему (желательно, через команду poweroff) и зайдите в настройки: в разделе Network перед Attached to разверните список и выберите Host-only Adapter, это нужно, для того, чтобы IP-адрес, по которому будет якобы располагаться наш сервер, никогда не менялся, при этом, доступ к Интернету на виртуальной машине Вы потеряете. alt text

  6. Запустите машину и после входа в терминал введите следующее

    ifconfig

    Чуть ниже на одну строку и левее надписи enp0s3 Вы увидите IP-адрес после надписи inet. Запомните его. alt text

  7. Добавьте конфигурацию запуска.

    • В поле Name введите название конфигурации, например, ClassWalkTestLinux, где префикс Class означает, что тесты компилируются и запускаются через классы; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс Linux - тесты проходят на Linux (Ubuntu Server). alt text
    • Напротив Run on выберите SSH.
      • В появившемся окне, в поле Host введите IP-адрес виртуальной машины, в поле Username - заданный на этапе установки системы username для входа в систему. alt text
      • Если появилось окно, что до SSH-сервера якобы нельзя достучаться, значит, есть шанс, что Вы всё сделали правильно. alt text
      • В поле Password введите пароль от username для входа в систему. alt text
      • После успешной проверки наличия JDK нажмите Next. alt text
      • Установите себе все необходимые директории или оставьте по умолчанию. alt text
    • В поле 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. alt text
  8. Для запуска системы JRunner без интерфейса можно воспользоваться скриптом JRunner.cmd. Обратите внимание, что в скрипте в качестве пути к программе выбран путь по умолчанию.

Компиляция и запуск через тестирующие jar-файлы на Windows

  1. Скачайте и установите Git Bash.
  2. Добавьте в директорию проекта скрипт Test.sh.
  3. Отредактируйте файл под Вашу настройку проекта:
    • В поле SOLUTIONS введите путь-директорию к персональному репозиторию, то есть тот, по которому лежит java-solutions.
    • В поле TESTS введите путь-директорию к репозиторию с тестами, то есть тот, по которому лежат artifacts/, lib/, modules/.
    • В поле SURNAME введите Вашу фамилию, то есть то, что Вы подставляли вместо __last_name__.
  4. Добавьте конфигурацию запуска.
    • В поле Name введите название конфигурации, например, JarWalkTestGitBash, где префикс Jar означает, что тесты компилируются и запускаются через .jar; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс GitBash - тесты проходят через приложение Git Bash.
    • В поле Script path укажите путь до файла Test.sh.
    • В поле Script options укажите аргументы к скрипту:
      1. Название пакета, в котором лежит Ваше решение домашнего задания.
      2. Название пакета, в котором лежат тесты к домашнему заданию.
      3. Чистое название класса, являющийся Вашим решением домашнего задания, то есть, например, Walk или RecursiveWalk.
      4. Название версии тестирования домашнего задания (easy/hard/bonus). alt text
    • Также скрипт поддерживает режим с пятью аргументами, об этом Вы можете прочитать здесь.
  5. Дополнительную информацию по работе скрипта Test.sh Вы можете прочитать здесь.

Компиляция и запуск через тестирующие jar-файлы на подсистеме Windows для Linux

  1. Активируйте компоненты Windows.

    • Откройте Панель управления - Все элементы панели управления - Программы и компоненты - Включение и отключение компонентов Windows.
    • В списке найдите пункт Подсистема Windows для Linux и убедитесь, что перед пунктом стоит галочка. В ином случае: поставьте, сохраните изменения и перезагрузите компьютер.
  2. В Microsoft Store установите приложение Подсистема Windows для Linux.

  3. Запустите терминал/командную строку, введите следующее ниже и перезагрузите компьютер:

    wsl.exe --update
    wsl.exe --set-default-version 2
  4. По пути домашнего каталога текущего пользователя должен появиться файл .wslconfig, в котором лежат основные глобальные настройки для WSL2. Содержимое .wslconfig предлагается установить следующим:

    [wsl2]
    nestedVirtualization=true
    memory=512MB
    processors=2
    

    Первые две строки должны быть по умолчанию после установки версии WSL на 2. Значение memory ограничивает подсистеме использование оперативной памяти, processors, соответственно, на количество процессоров.

  5. Запустите терминал/командную строку и установите Ubuntu 20.04.6 LTS с помощью следующей команды:

    wsl.exe --install Ubuntu-20.04

    Альтернативным вариантом Вы можете установить приложение с Microsoft Store.

  6. Запустите дистрибутив (это можно сделать, введя в терминал/командную строку wsl), проследуйте инструкциям установки и введите в терминал WSL:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install -y openjdk-17-jdk-headless
  7. Добавьте в директорию проекта скрипты Test.sh и TestWSL.cmd.

  8. Отредактируйте файл под Вашу настройку проекта:

    • В поле SOLUTIONS введите путь-директорию к персональному репозиторию, то есть тот, по которому лежит java-solutions.
    • В поле TESTS введите путь-директорию к репозиторию с тестами, то есть тот, по которому лежат artifacts/, lib/, modules/.
    • В поле SURNAME введите Вашу фамилию, то есть то, что Вы подставляли вместо __last_name__.
  9. Добавьте конфигурацию запуска.

    • В поле Name введите название конфигурации, например, JarWalkTestWSL, где префикс Jar означает, что тесты компилируются и запускаются через .jar; WalkTest - версия домашнего задания (easy/hard/bonus); суффикс WSL - тесты проходят через подсистему.
    • В поле Script path укажите путь до файла TestWSL.cmd.
    • В поле Script options укажите аргументы к скрипту:
      1. Название пакета, в котором лежит Ваше решение домашнего задания.
      2. Название пакета, в котором лежат тесты к домашнему заданию.
      3. Чистое название класса, являющийся Вашим решением домашнего задания, то есть, например, Walk или RecursiveWalk.
      4. Название версии тестирования домашнего задания (easy/hard/bonus). alt text
    • Также скрипт поддерживает режим с пятью аргументами, об этом Вы можете прочитать здесь.
  10. Дополнительную информацию по работе скрипта 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

В качестве единственного опционального флажка для скрипта предлагается --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/ теперь будет зависть только от размера исходного и скомпилированного кода решения домашнего задания.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks