Копирование и перезапись некоторых ресурсов с помощью Maven в профиле - PullRequest
0 голосов
/ 14 мая 2018

У меня есть два проекта, которые построены из одного мультипроекта maven, проект A и проект B. Недавно проект B начал свою работу и отличается от проекта А лишь незначительно, а именно использует несколько различных файлов конфигурации. Моя идея состояла в том, чтобы создать профиль для projectB и добавить дополнительные файлы конфигурации / заменить существующие файлы конфигурации. Я попробовал несколько подходов к stackoverflow, включая плагин copy-rename и плагин зависимостей mvn. Частично проблема заключается в том, что оба проекта имеют файл с одинаковым именем конфигурации.

Мой текущий / последний подход заключался в использовании maven-resources-plugin следующим образом: Я создал дополнительный каталог: src / main / projectbresources и файл проекта:

        <profile>
        <id>projectb</id>
        <activation><activeByDefault>false</activeByDefault></activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <!-- here the phase you need -->
                            <phase>validate</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/main/projectbresources</directory>
                                        <filtering>true</filtering>
                                    </resource>
                                </resources>
                                <overwrite>true</overwrite>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            </build>
    </profile>

У меня есть файл с одинаковым именем в src / main / resources и src / main / projectbresources, однако, независимо от того, с каким профилем я создаю, файл из src / main / resources всегда находится в целевой папке. Дополнительные файлы, находящиеся только в ресурсах проекта, копируются в целевой файл.

1 Ответ

0 голосов
/ 14 мая 2018

Исходя из вашего заявления " Проект B недавно появился на свет и мало чем отличается от проекта А, а именно использует несколько разных файлов конфигурации. " Я бы сказал, что вам не нужны 2 отдельных проекта , Вы можете иметь только один проект и на основе активированного профиля выбирать разные конфигурации. При таком подходе файлы конфигурации для обоих случаев могут иметь одинаковое имя, но разное содержимое.

Структура вашего проекта будет выглядеть (в качестве примера):

корневая папка проекта:

pom.xml
- src
-- main
--- resources-profileA
--- resources-profileB

Теперь pom.xml содержит 2 профиля: profileA и profileB. Каждый профиль определяет свою собственную сборку / ресурсы.

<profiles>
    <profile>
        <id>projectA</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources-profileA</directory>
                </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <id>projectB</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources-profileB</directory>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>

Более того, вы можете сделать один профиль активным по умолчанию. Это поможет вашей среде разработки автоматически использовать ее. Если вы хотите иметь активный профиль по умолчанию для этого профиля, вы можете назвать папку ресурсов просто resources (имя maven по умолчанию) и оставить другое имя для второго профиля.

ОБНОВЛЕНИЕ:

Для упрощения и добавления некоторых дополнительных файлов вы можете использовать для профиля проекта A maven по умолчанию и определить только профиль для проекта B.

Корневая папка проекта становится:

pom.xml
- src
-- main
--- resources
--- resources-profileB

и pom.xml будет содержать только один профиль по умолчанию:

<profiles>
    <profile>
        <id>projectB</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources-profileB</directory>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>

Как построить для двух профилей:
Сборка без профиля эквивалентна построению для проекта А:

mvn clean install

Buid для профиля projectB будет игнорировать ресурсы в папке по умолчанию и будет использовать только ресурсы, определенные в профиле (src / main / resources-profileB).

mvn clean install -P projectB

...