<scope> при условии </scope> зависимость и weblogic? - PullRequest
0 голосов
/ 11 октября 2018

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

Я пытаюсьпонять и найти вариант использования для предоставленной зависимости в maven.Моя идея такова:

скажем, у меня есть 3 проекта Maven: A, B, C

  • B - API, как JPA
  • C - давайтескажем ради аргумента, Hibernate
  • A имеет предоставленную зависимость от B

, если я разверну A и C на одном и том же домене / сервере Weblogic.Сможет ли A увидеть C на пути к классам как реализацию B?

Если нет, то каков хороший вариант использования для предоставленной зависимой области?

Заранее спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Как указано в maven документации для предоставленной области:

Это очень похоже на компиляцию, но указывает, что вы ожидаете, что JDK или контейнер предоставят зависимость во время выполнения.Например, при создании веб-приложения для Java Enterprise Edition вы должны установить зависимость от API-интерфейса сервлета и связанных API-интерфейсов Java EE, так как веб-контейнер предоставляет эти классы.Эта область доступна только для пути к классам компиляции и тестирования и не является транзитивной.

Там уже упоминался один вариант использования: при создании приложения JavaEE, которое впоследствии вы хотите развернуть в приложении JavaEEСервер Сервер приложений обеспечивает реализацию javaEE.

Таким образом, чтобы сказать maven, что вам нужна эта зависимость во время компиляции, но не упакованная в проект позже, вы должны использовать предоставляемую область видимости как:

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

Еще один вариант использования - при создании приложения JavaEE, в котором используются разные типы контейнеров.Существует JavaEE EJB и веб-контейнер , и вам нужно убедиться, что ваши классы не будут упакованы / загружены в неправильный контейнер или даже загружены в оба контейнера, поскольку это может вызвать всевозможные проблемыдля вашего приложения и загрузчиков классов.

Допустим, вы создаете приложение, которое содержит как модуль EJB, так и веб-модуль, и вы хотите, чтобы ваши EJB работали в контейнере EJB.Вы также хотите использовать свои EJB-компоненты в веб-модуле.Поскольку EJB-компоненты выполняются в контейнере EJB, а веб-модуль выполняется в веб-контейнере, вы не можете просто добавить EJB-зависимость с компиляцией области в ваш веб-проект.Потому что, если вы это сделаете, maven упакует ejb в файл war, а EJB окажется в веб-контейнере.

Таким образом, в вашем веб-приложении вы добавите зависимость как

<artifactId>my-web</artifactId>
<packaging>war</packaging>
<dependency>
    <groupId>your.group</groupId>
    <artifactId>my-ejb</artifactId>
    <type>ejb</type>
    <scope>provided</scope>
</dependency>

Таким образом, вы сообщаете maven, что вы хотите использовать свой модуль EJB, но он не должен упаковать его в ваш war-файл и что вы сами убедитесь, что этот модуль доступен во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...