Вопрос

В нашем проекте Maven мы пробуем следующую структуру каталогов (всего около 80 проектов, показаны лишь некоторые, чтобы вы поняли идею):

myappli      (pom)
-- module1       (pom)
--|-- utils    (pom)
--|-- ejb       (pom)
--|--|-- myappli-module1-a-ejb    (jar)
--|--|-- myappli-module1-b-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)
...
-- module6       (pom)
--|-- utils       (pom)
--|-- ejb       (pom)
--|--|-- myappli-module6-c-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)

Примечание:Это плоский структура для Maven, поскольку все нелистовые проекты имеют packaging значение «пом».(см. книгу BetterBuildsWithMaven).

Мы определяем версии зависимостей в "dependencyManagement", в "myappli"Пом.Это работает нормально.

Наша проблема заключается в повторном использовании самих зависимостей..Например, зависимости ejb являются общими для всех проектов ejb (по замыслу).Мы не хотим вырезать и вставлять и сохранять все это при каждом изменении!

Мы думали использовать некоторые "понятие импорта" для зависимостей ejb и определите наши зависимости ejb один раз на уровне приложения.Наши неудачные попытки были:

  • Знаток "parent pom" идея была бы хороша, но она уже используется модулями, поэтому она недоступна для наших требований.
  • В Maven не найдено средство импорта (за исключением DependencyManagement)
  • Определение объекта XML не распознано.Мы попробовали помпон, подобный следующему, и получили ошибку
    "Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'":

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE project [
    <!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">
    ]>
    <project ...
    ...
    &ejbDependencies;
    ...


Отредактировано :Я пробую решение, предложенное Робертом, но что-то не так.

Когда я компилирую свой проект ejb, он не находит самих зависимостей.Я получаю сообщение об ошибке при компиляции (компиляция mvn), в котором говорится, что пакет javax.ejb отсутствует.

Примечание:Раньше я запускал «mvn install» в проекте зависимостей.

Это моя конфигурация:

<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-maven</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-maven-ejb</artifactId>
  <version>${myproj-version}</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.ejb</groupId>
      <artifactId>ejb</artifactId>
    </dependency>

    <dependency>
      <groupId>ojdbc</groupId>
      <artifactId>ojdbc</artifactId>
    </dependency>
  </dependencies>
</project>

---------------------------------
<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-identite-ejb</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-identite-metier</artifactId>
  <name>SNR IDENTITE METIER</name>
  <version>2.0.1</version>
  <packaging>ejb</packaging>

  <dependencies>
    <dependency>
      <groupId>com.company</groupId>
      <artifactId>myproj-maven-ejb</artifactId>
      <version>${myproj-version}</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

Не знаю, меняет ли это что-то, но у нас есть иерархия, связывающая два помпона.
У нас есть строгая структура Maven, где каждый каталог объявляет все подкаталоги как модули maven, а каждый подкаталог объявляет родительский элемент как родительский maven.
И общий родительский каталог является частью этой структуры.

+---maven
|   \---ejb
+---identite
|   +---ejb
|   |   \---SNR_IDENTITE_METIER

Отредактировано:

Ответ, данный рифом, кажется правильным.С Maven это сделать невозможно, потому что наши зависимости предусмотрены, а значит не транзитивны :-(

У нас действительно много проблем с настройкой Maven.Так много мелочей просто не работают.Сегодня я обнаружил, что цель сайта не может обрабатывать свойства, которые мы используем для номеров версий!

Это было полезно?

Решение

Есть ли у ваших импортированных зависимостей предоставил объем?Действительно, эта область видимости не является транзитивной (см. Maven Области зависимостей).

Это могло быть причиной не замены.

Другие советы

Вы можете использовать PoM-зависимости импортировать зависимости в произвольные проекты.

Проект pom может выглядеть примерно так:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
  </dependencies>
</project>

И импортируется как:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <type>pom</type>
</dependency>

Видеть Maven, полное руководство - Группировка зависимостей для получения подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top