Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Проект и запуск сервера

Приложение Jakarta EE — это обычный проект Maven, который собирается в WAR-файл (Web Application Archive): архив с классами и веб-страницами. WAR сам по себе не запускается — его разворачивают (deploy) на сервере приложений. Плагин liberty-maven-plugin делает это за нас: скачивает Open Liberty, кладёт туда WAR и запускает сервер.

Генератор проекта

У Open Liberty есть официальный генератор — сайт start.openliberty.io. В форме выберите Maven, Jakarta EE 11.0, MicroProfile 7.1 и Java 21. Тот же архив можно получить из терминала:

curl -o blog.zip "https://start.openliberty.io/api/start?a=blog&b=maven&e=11.0&g=com.example&j=21&m=7.1"
unzip blog.zip -d blog
cd blog

В папке появятся pom.xml, обёртка Maven mvnw и пример конфигурации сервера. Пакет для кода курса — com.example.blog.

Структура

ПутьЧто внутри
pom.xmlОписание сборки и зависимостей
src/main/java/com/example/blog/Java-код приложения
src/main/resources/META-INF/Настройки: базы данных, MicroProfile Config
src/main/webapp/Статические файлы и страницы Faces
src/main/liberty/config/server.xmlНастройки сервера Open Liberty

pom.xml

<!-- pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.example</groupId>
    <artifactId>blog</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
 
    <properties>
        <maven.compiler.release>21</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <version>11.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.microprofile</groupId>
            <artifactId>microprofile</artifactId>
            <version>7.1</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
    </dependencies>
 
    <build>
        <finalName>blog</finalName>
        <plugins>
            <plugin>
                <groupId>io.openliberty.tools</groupId>
                <artifactId>liberty-maven-plugin</artifactId>
                <version>3.12.3</version>
            </plugin>
        </plugins>
    </build>
</project>

Главное здесь — <packaging>war</packaging> и зависимость jakarta.jakartaee-api со scope provided: API нужен для компиляции, а реализацию даст сервер, поэтому в WAR библиотека не попадает. finalName задаёт имя архива — target/blog.war.

server.xml

<!-- src/main/liberty/config/server.xml -->
<server description="Blog server">
 
    <featureManager>
        <feature>webProfile-11.0</feature>
        <feature>microProfile-7.1</feature>
    </featureManager>
 
    <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="8080" httpsPort="8443" />
 
    <webApplication contextRoot="/blog" location="blog.war" />
</server>

В featureManager перечислены возможности сервера. webProfile-11.0 включает всё, что нужно курсу: сервлеты, REST, CDI, JPA, транзакции, Faces, безопасность. Генератор ставит полный jakartaee-11.0, но он тянет ещё и удалённые EJB, которые без настроенного реестра пользователей пишут в лог ошибку CWWKS9660E. Порт заменён на 8080, а contextRoot — начало адреса приложения: http://localhost:8080/blog/.

Первая страница и запуск

Создайте файл src/main/webapp/index.html с любым HTML, например заголовком «Блог». Затем запустите сервер в режиме разработки:

./mvnw liberty:dev

На Windows — mvnw.cmd liberty:dev. Первый запуск скачивает сервер и занимает пару минут. Когда всё готово, в терминале появятся строки (вместо home-pc будет имя вашего компьютера):

[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://home-pc:8080/blog/
[INFO] [AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 12.920 seconds.

Откройте http://localhost:8080/blog/ — браузер покажет index.html. В режиме разработки сервер сам пересобирает и перезапускает приложение, когда вы сохраняете файл. Остановить его можно, набрав q и Enter.

КомандаЧто делает
liberty:devЗапуск с автоматической перезагрузкой
liberty:runОбычный запуск в терминале
liberty:start / liberty:stopЗапуск в фоне и остановка

Логи сервера лежат в target/liberty/wlp/usr/servers/defaultServer/logs/messages.log.

Частая ошибка

Открыть адрес без contextRoot, например http://localhost:8080/hello вместо http://localhost:8080/blog/hello. Сервер вернёт страницу Open Liberty «Context Root Not Found»: на этом пути нет ни одного приложения. Все адреса блога начинаются с /blog.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.