В последнее время наметилась тенденция перехода с application server-ов на использование uber-jar-ов. Не Spring Boot-ом единым жива тема.
Для тех, кто привык (и правильно!) программировать с использованием J2EE стандартов, ребята из RedHat уже давно сваяли прекрасный toolkit для переделки WildFly-oriented J2EE приложений в standalone jars.
В прицнипе, всё прекрасно и логично: лично у меня был опыт переделки WildFly приложения со всеми сервисами, JPA и прочим в standalone версию в течение часа. Короче говоря, WildFly Swarm оставил очень хорошее впечатление.
Едиснтвенное, с чем пришлось покопаться (в другом приложении), так это с HTTPS соединением, с одновременным дебагом этого самого standalone приложения.
Итак, обо всём по порядку.
Чтобы поднять (java -jar myapp.jar) standalone приложение с поддержкой HTTPS сначала требуется сгенерировать самописный (как минимум) сертификат, что делается примерно так (одной строкой, просто и быстро, без интерактива):
keytool -genkey -keystore wfswarm.jks -keyalg RSA -keysize 2048 -validity 999 -dname "CN=Vasja Pupkin, OU=MojProjekt, O=RogaiKopyta, L=Riga, ST=Latvia, C=LV" -storepass mypassword -keypass mypassword
Получили файлик wfswarm.jks. Это то, что нам нужно.
Добавим конфигурацию в файл wfswarm\src\main\resources\project-defaults.yml
swarm:
https:
port: 7443
keystore:
path: c:/keys/wfswarm.jks
password: mypassword
(в принципе, project-defaults.yml может ничего больше и не содержать)
На данном этапе проект должен подниматься как uber-jar и отвечать (с самописным сертификатом) по адресу https://localhost:7443/myapp
Поскольку сама сборка uber-jar занимает время, которое не хочется тратить во время разработки, то заметно быстрее мы можем поднимать наш Wildfly Swarm проект с помощью Maven плагина.
Конфигурация плагина в POM файле:
<properties>
...
<version.wildfly.swarm>2018.5.0</version.wildfly.swarm>
</properties>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>bom</artifactId>
<version>${version.wildfly.swarm}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
...
<plugin>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-plugin</artifactId>
<version>${version.wildfly.swarm}</version>
<configuration>
<!--Enable HTTPS on debug-->
<fractions>management</fractions>
</configuration>
<executions>
<execution>
<goals>
<goal>package</goal>
</goals>
<!--Enable HTTPS for final JAR-->
<configuration>
<fractions>management</fractions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Обратите внимание, что тут присутствует <!--Enable HTTPS on debug-->
. Конечно же, мы хотим поднимать приложение по-возможности быстро, да и ещё в debug режиме. Именно поэтому понадобилось упоминать отдельно <fractions>management</fractions>
для простой сборки и для дебага, чтобы и там и там работало через HTTPS.
Ну и, соответственно, для относительно быстрого старта с дебагом делаем:
mvn wildfly-swarm:run -Dswarm.debug.port=5005
а финальная сборка - как обычно:
mvn clean package
Profit.