Повторное использование Maven в помпонах
-
21-09-2019 - |
Вопрос
В нашем проекте 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, полное руководство - Группировка зависимостей для получения подробной информации.