Используйте модуль jboss для многокомпонентного провайдера в приложении maven

Я разрабатываю веб-приложение maven, в которое я включаю стандартный API Java EE 8.

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

Я развертываю JBoss EAP 7.2.9.

В моем приложении я хочу загружать файлы в конечную точку JAX-RS.

@POST
@Path("{id}/file-upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(@PathParam("id") Long id, @MultipartForm FileMetaData metaData) {}

FileMetaData

public class FileMetaData{
  @FormParam("name")
  private String name;
  
  @FormParam("type")
  private String type;

  @FormParam("file")
  @PartType("application/octet-stream")
  byte[] file;
}

Проблема в том, что @MultipartForm не является частью стандартного API JavaEE 8. Чтобы использовать его, я должен включить поставщика resteasy multipart в свой pom.

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>3.6.1.Final</version>
        <scope>provided</scope>
    </dependency>

Я использовал версию, предоставленную WildFly 14.0.0, которая является аналогом JBoss EAP 7.2.9 сообщества. Однако я не уверен, что это правильная практика. JBoss EAP использует собственную реализацию модуля resteasy-multipart-provider-3.6.1.SP9-redhat-00001.jar, который находится в приватном репозитории maven.

Кроме того, я по-прежнему использую реализации по умолчанию, предоставляемые JBoss для API Java EE (включая несоставные конечные точки JAX-RS), поскольку я не включаю какие-либо другие конкретные зависимости в свой pom.

  • Может ли включение приведенной выше зависимости быть источником конфликтов?
  • есть ли способ зависеть от модуля, предоставляемого JBoss, без привязки к конкретной версии JBoss?

person Rasha Elsayed    schedule 08.02.2021    source источник


Ответы (1)


После дополнительных исследований я обнаружил следующее: чтобы использовать модуль-контейнер (например, jboss resteasy) в своем приложении, добавьте в pom зависимость с областью действия provided, что означает, что эта зависимость будет предоставлена ​​во время выполнения. по контейнеру. Затем вы заметите, что resteasy не включен в ваш файл WAR.

Версия, реализованная вашим контейнером, — это та, которая используется во время выполнения, а не версия, которую вы предоставляете в своем pom.xml (здесь 3.6.1.SP9-redhat-00001, а не 3.6.1.Final).

Однако ваш код компилируется с версией в pom, которая должна быть меньше или равна версии, предоставленной контейнером (при условии, что более высокие версии из контейнера всегда должны быть обратно совместимыми).

person Rasha Elsayed    schedule 12.02.2021