У меня есть проект модуля maven, который имеет следующие модули:
родительский пом
- ядро
- веб-достояние
- админ
- сеть
Как веб, так и администратор зависят от ядра и веб-ресурсов, и у каждого модуля есть свой файл profile.xml.
До сих пор и наш администратор, и Интернет имели одно и то же имя источника данных и веб-сервер, поэтому на всем пути от ядра к общему веб-сайту у нас была ссылка на это имя источника данных. (Фактически заполнитель макроса источника данных, который заменяется из profiles.xml во время сборки).
Однако мы должны разделить источники данных, и теперь я пытаюсь найти лучший способ сделать это.
Вот фрагмент кода для ясности.
Родительский пом:
<?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>com.my.groupId</groupId>
<artifactId>parentArtifact</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
...
<modules>
<<module>core</module>
<module>web-commons</module>
<module>admin</module>
<module>web</module>
</modules>
<project>
Core pom.xml
<?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>com.my.groupId</groupId>
<artifactId>core</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
...
<project>
core Profiles.xml
<profilesXml xmlns="http://maven.apache.org/PROFILES/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/PROFILES/1.0.0 http://maven.apache.org/xsd/profiles-1.0.0.xsd">
<profiles>
<profile>
<id>DEV</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<datasource.name>web_datasource</datasource.name>
...
</properties>
</profile>
</profiles>
</profilesXml>
web-commons pom.xml
<?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>com.my.groupId</groupId>
<artifactId>web-commons</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
...
<dependencies>
<dependency>
<groupId>com.my.groupId</groupId>
<artifactId>core</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<project>
web-commons Profiles.xml
<profilesXml xmlns="http://maven.apache.org/PROFILES/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/PROFILES/1.0.0 http://maven.apache.org/xsd/profiles-1.0.0.xsd">
<profiles>
<profile>
<id>DEV</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<datasource.name>web_datasource</datasource.name>
...
</properties>
</profile>
</profiles>
</profilesXml>
web pom.xml
<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>
<parent>
<artifactId>parentArtifactId</artifactId>
<groupId>com.my.groupId</groupId>
<version>1.0</version>
</parent>
<groupId>com.my.groupId</groupId>
<artifactId>web</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.my.groupId</groupId>
<artifactId>core</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.my.groupId</groupId>
<artifactId>web-commons</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
....
</project>
web profiles.xml
<profilesXml xmlns="http://maven.apache.org/PROFILES/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/PROFILES/1.0.0 http://maven.apache.org/xsd/profiles-1.0.0.xsd">
<profiles>
<profile>
<id>DEV</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<timeout>90</timeout>
...
</properties>
</profile>
</profiles>
</profilesXml>
admin pom.xml
<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>
<parent>
<artifactId>parentArtifactId</artifactId>
<groupId>com.my.groupId</groupId>
<version>1.0</version>
</parent>
<groupId>com.my.groupId</groupId>
<artifactId>admin</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.my.groupId</groupId>
<artifactId>core</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.my.groupId</groupId>
<artifactId>web-commons</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
....
</project>
admin profiles.xml
<profilesXml xmlns="http://maven.apache.org/PROFILES/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/PROFILES/1.0.0 http://maven.apache.org/xsd/profiles-1.0.0.xsd">
<profiles>
<profile>
<id>DEV</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<timeout>120</timeout>
...
</properties>
</profile>
</profiles>
</profilesXml>
Возможные решения:
- Измените основной файл profiles.xml и все последующие profiles.xml, а затем запустите
чистый пакет mvn -PDEV_WEB, а затем снова
чистый пакет mvn -PDEV_ADMIN
core Profiles.xml
<profilesXml xmlns="http://maven.apache.org/PROFILES/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/PROFILES/1.0.0 http://maven.apache.org/xsd/profiles-1.0.0.xsd">
<profiles>
<profile>
<id>DEV_WEB</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<datasource.name>web_datasource</datasource.name>
...
</properties>
</profile>
<profile>
<id>DEV_ADMIN</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<datasource.name>admin_datasource</datasource.name>
...
</properties>
</profile>
</profiles>
</profilesXml>
Сохраните все файлы pom.xml и profiles.xml как есть и найдите точку жизненного цикла maven, где мы можем сгенерировать web.war (с core.jar и web-commons.jar с web_datasource), а затем сгенерируйте admin.war (в котором есть core.jar и web-commons.jar, в котором есть admin_datasource) Не знаю, как, но придется исследовать это дальше.
- Раздельное веб-развертывание и администрирование и сохранение имени источника данных, но с двумя разными веб-серверами, которые имеют разные настройки источника данных. [Наименее вероятный вариант]