Хобрук: Ваш путь к мастерству в программировании

Как создать действительный военный файл из папки / src & / WebContent в интерфейсе командной строки?

У меня есть проект с 2 папками:

  • 1) src - содержит файлы и папки кода Java (сущность, код, отдых, таймер)
  • 2) WebContent - содержит папки (META-INF, WEB-INF)

У меня нет опыта работы с серверной Java, и я хотел бы спросить, как я могу создать действительный файл .war с помощью интерфейса командной строки, который можно развернуть с помощью Wildfly веб-интерфейс администратора и добиться, чтобы проект был доступен и запущен по URL-адресу, указанному в файле web.xml (расположенном в папке WEB-INF).

Я попытался развернуть войну, созданную с помощью следующей команды в корневой папке (я тоже попробовал папку WebContent), но после загрузки файла .war приложение недоступно по заданному URL-адресу (404).

Спасибо за любой совет.

Редактировать:

Добавлена ​​актуальная структура проекта

введите описание изображения здесь


Ответы:


1

Я бы посоветовал вам перейти на какой-нибудь инструмент сборки. Существуют различные варианты - я рассмотрю Maven, поскольку он мне наиболее знаком.

Во-первых, это организация кода. Вам нужно будет организовать свой код следующим образом:

src/
    main/
        java/
           com/
               packagename/
                   SomeJavaCode.java
        webapp/
            WEB-INF/
                web.xml

Таким образом, весь ваш Java-код будет где-то под src/main/java в любых пакетах, которые вы хотите. В src/main/webapp находятся файлы, относящиеся к вашему веб-приложению. У вас должно быть как минимум WEB-INF/web.xml для файла .war, но если у вас есть .jsp или .html, он также будет помещен в каталог webapp.

В корне каталога вам понадобится файл pom.xml. Это ваш файл сборки, который сообщает Maven, что делать. Самый простой вариант для файла .war:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>tld.companyname</groupId>
    <artifactId>your-artifact</artifactId>

    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                    <compilerArgument>-Xlint:all</compilerArgument>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Этот файл зависит только от стека JEE с библиотеками сервлетов. Оба они помечены как «предоставленные», поскольку вам не нужно включать их в ваш файл .war, поскольку Wildfly их уже предоставляет.

Обратите внимание, что у вас, скорее всего, будут дополнительные зависимости для вашего кода. Их нужно добавить как строфу dependency в pom.xml, как и другие. Если вы не уверены, каким должно быть это значение, перейдите на mvnrepository.com, чтобы найти правильный код для вставки.

Результатом этого будет файл .war в каталоге target. Этот файл .war можно развернуть в Wildfly.

Дополнительная часть - чтобы помочь Wildfly определить корневой URL-путь вашего файла .war, включите файл jboss-web.xml в свой WEB-INF каталог:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web version="10.0"
           xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_10_0.xsd">

    <context-root>/myapp</context-root>
</jboss-web>

Когда вы развертываете этот .war файл jboss-web.xml сообщит Wildfly, что он должен поместить его по пути /myapp в этом примере. На мой взгляд, это устраняет некоторую путаницу, связанную с автоматическими именами веб-приложений, которые могут возникнуть. Обратите внимание, что вполне законно иметь context-root быть /, чтобы ваш .war находился в корне иерархии URL-адресов.

Как только у вас будет все это, вам нужно будет установить Maven и включить его в свой PATH. Взгляните на страницу установки Maven для получения подробной информации о вашей операционной системе. После установки просто запустите:

mvn clean package

в командной строке для создания файла .war в целевом каталоге.

ИЗМЕНИТЬ

Одно отличие состоит в том, что вам не нужно добавлять зависимости внутри вашего кода - Maven позаботится об этом. Так, например, в вашем образе для библиотек AWS я бы просто добавил:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.11.119</version>
</dependency>

внутри блока dependencies. Maven автоматически извлечет эту библиотеку из центрального репозитория Maven и будет использовать ее. Вам не нужно иметь его в вашем WEB-INF/lib каталоге, поскольку при сборке Maven он автоматически включает библиотеки, которые у вас есть в ваших зависимостях (и все, от чего они зависят). Опять же, просто найдите в https://mvnrepository.com/ нужную библиотеку.

12.05.2020
  • Спасибо, я обновил структуру папок и выполнил команду mvn clean package из корневой папки, и у меня было много ошибок относительно зависимостей, например /help/ContribCacheRefreshTask.java:[11,21] пакет com.amazonaws не существует Как Мне нужно обновить структуру или файл pom.xml, пожалуйста? 14.05.2020
  • Я думаю, мне нужно будет связать локальные библиотеки jar в pom.xml? 14.05.2020
  • Я обновил ответ @redrom - вам просто нужно добавить зависимости, и Maven позаботится об этом. 14.05.2020
  • Новые материалы

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

    Случай использования npm3 вместо npm2 для разработки библиотеки
    Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...