JavaRush /Курсы /Модуль 3. Java Professional /Проект по теме: Maven

Проект по теме: Maven

Модуль 3. Java Professional
2 уровень , 6 лекция
Открыта

Задание: Нужно сделать исполняемый JAR-файл с игрой на JavaFX через графический движок от JavaRush.

Для этого нужно:

  1. Сделать fork из репозитория https://github.com/vasylmalik/project-maven.git
  2. Скачать свою версию проекта к себе на компьютер. Дальше будем работать с файлом pom.xml.
  3. Добавить зависимости:
    • org.apache.commons: commons-lang3: 3.12.0
    • org.openjfx: javafx-controls: 18.0.1
    • com.javarush: desktop-game-engine:1.0 (об этой зависимости будет отдельное задание)
    • org.junit.jupiter: junit-jupiter-engine: 5.8.2 (с scope test)
  4. Добавить плагины для:
    • установки зависимости com.javarush: desktop-game-engine:1.0 из библиотеки lib в локальный репозиторий (google в помощь);
    • плагин maven-compiler-plugin оставить без изменений;
    • плагин, который соберет все зависимости (с scope compile) и сложит в какую-то директорию при сборке;
    • плагин maven-jar-plugin, который сделает jar файл, содержащий код игры и зависимости. В этом плагине нужно сконфигурировать файл MANIFEST.MF, чтоб он содержал секции: Class-Path, Main-Class и Rsrc-Main-Class
    • В Class-Path должны быть прописаны все наши JAR-зависимости.
    • В Main-Class должен быть прописан класс org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader, который умеет использовать classpath из JAR-файлов, а также умеет стартовать приложение на JavaFX.
    • В Rsrc-Main-Class должен быть прописан стартовый класс игры (com.javarush.games.racer.RacerGame).
  5. В плагине maven-surefire-plugin сделать конфигурацию, чтоб тест StrangeTest не запускался при сборке. Остальные тесты должны выполняться.
  6. Добавить секцию “resources”, в которой сказать, что собранные JAR-зависимости это ресурс, чтоб плагин maven-jar-plugin сложил их внутрь JAR-файла в папку lib/
  7. Залить изменения в свой GitHub-репозиторий, отправить ссылку на него преподавателю.

Полезное:

  1. Билд нужно выполнять командой mvn clean install.
  2. Запуск игры (через Maven) с целью посмотреть можно выполнить командой mvn javafx:run.
  3. Некоторым плагинам нужно переопределить phase.
  4. В проекте используется версия JDK 18.0.1. Она должна быть скачана у тебя на компе.
  5. При билде через Maven сперва будут ошибки. Читай их внимательно и ты упростишь себе жизнь.
  6. В пакете org.eclipse.jdt.internal.jarinjarloader ничего не изменяй. В нем кастомный класс-лоадер (честно скопированный с StackOverflow), в котором изменен запуск метода main на запуск JavaFX приложения. Использовать только в учебных целях.
  7. Если выполнить все пункты, в результате сборки ты получишь fat-JAR-файл. Запустить и проверить, что все сделано правильно можно командой:
    
    <путь к java 18> -jar 
            
        
            
        
            
        <имя результирующего jar файла> пример "c:\users\leo12\.jdks\openjdk-18.0.1.1\bin\java.exe" -jar "e:\temp\project-maven-1.0.jar" < code>
  8. В результате ты увидишь:
  9. Билд зависит от твоей операционной системы. То есть, если JAR-файл собран на Windows, его можно выполнить на любом компе с Windows и Java18. И нельзя выполнить на Mac и Linux.


Разбор проекта. Смотреть после выполнения!

Комментарии (17)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Сергей К Уровень 78
9 октября 2025
Задание уровня Epic, в видео после задания все подробно разбирается.
Александр Уровень 115
6 сентября 2025
Для тех кто страдал так же как и я в попытке понять почему указано ставить зависимость внешнего jar файла через плагин, при том что автоматически это вроде как сделать нельзя, так как при полной сборке проекта зависимости собираются раньше всех фаз которые мы можем выбрать. По факту вы ставите плагин, прописываете фазу вроде validate. Затем сначала запускаете отдельно mvn validate и только уже потом mvn install. Таким образом тому кто скачает ваш проект нужно будет только повторить эти действия, а не прописывать вручную установку команды для закидывая файла в свой локальный репозиторий: <!-- Перед сборкой проекта через mvn install сначала запустить mvn validate, чтобы зависимость добавились в локальный репозиторий--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>install-lib-dependencies</id> <phase>validate</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>${project.basedir}/lib/desktop-game-engine.jar</file> <groupId>com.javarush</groupId> <artifactId>desktop-game-engine</artifactId> <version>1.0</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin> P.S. Еще есть альтернативная версия указать явный путь к файл jar: <scope>system</scope>
Samandar Уровень 62
10 февраля 2025
Константин Уровень 81
3 ноября 2024
https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html Статья которая поможет вам поставить зависимость: <dependency> <groupId>com.javarush</groupId> <artifactId>desktop-game-engine</artifactId> <version>1.0</version> </dependency> Это можно сделать командой из терминала maven.
Равиль Уровень 91
3 ноября 2024
Данная статья помогла добавить зависимость в локальный репозиторий https://dzen.ru/a/YpYry3_vvGMZWdQH
I'm Siberian Уровень 109 Expert
29 октября 2024
Если бы изначально были правильно прописаны переменные среды для jdk и jre, я бы не потратил столько времени на осознание ошибок, которые лезли ото всюду. з.ы. powerShell не друг без $ з.ы.ы. гайд для таких же утков как я (windows): 1. убедится что стоит последний jre и 18й jdk 2. идём в сфойства системы -> переменные среды 3. в "Переменные среды пользователя", жмак "создать" 3.1 в имя переменной пишем JAVA_HOME, в значение переменной, жмак "обзор каталога" и указываем путь до явы, например C:\Program Files\Java\jdk-21.0.2 3.2 в имя переменной пишем JRE_HOME в значение переменной, жмак "обзор каталога" и указываем путь, например C:\Program Files\Java\jre1.8.0_431 4. ищем Path, жмак изменить, добавляем путь мавена (на случай если из прошлых лекций еще не сделали) например: C:\Program Files\Apache\apache-maven-3.9.9\bin 5. В "Системные переменные" добавляем тоже самое что в пункте 3.1 6. В Path добавялем путь до папок bin внутри наших jdk jre. 7. если вы не закрыли идею или не перезапустили терминал, изменения не сработают. обязательно перезапускаем терминал (самый простой способ это открыть закрыть крестиком терминал внутри идеи. или создать новый. или закрыть открыть идею) 8. когда сдали проект, возвращаем пути в переменных средах, обратно на 21ю яву )
Андрей Уровень 109
5 апреля 2024
а у меня не было ошибки о том, что пропущен <Class-Path>, 2 часа мучился...
28 ноября 2023
Для тех, кто тупит, как и я, и не может понять что за /lib посмотрите свои файлы проекта
Никита Уровень 60 Expert
21 октября 2023
В официальной документации все понятно написано https://maven.apache.org/plugins/maven-install-plugin/
jvatechs Уровень 111 Expert
7 мая 2023
Было интересно, спасибо гуглу и stackoverflow.