выполнение скрипта из maven внутри многомодульного проекта - PullRequest
3 голосов
/ 28 марта 2010

У меня есть этот многомодульный проект.

В начале каждой сборки я хотел бы запустить какой-нибудь bat-файл.

Итак, я сделал следующее:

<profile>
            <id>deploy-db</id>
            <build>
                <plugins>
 <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1.1</version>
        </plugin>
                </plugins>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>exec-maven-plugin</artifactId>
                            <version>1.1.1</version>
                            <executions>
                                <execution>
                                    <phase>validate</phase>
                                    <goals>
                                        <goal>exec</goal>
                                    </goals>
                                    <inherited>false</inherited>
                                </execution>
                            </executions>
                            <configuration>
                                <executable>../database/schemas/import_databases.bat</executable>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

когда я запускаю mvn verify -Pdeploy-db из корня, этот скрипт выполняется снова и снова в каждом из моих модулей.

Я хочу, чтобы он выполнялся только один раз в корневом модуле.

Что там мне не хватает?

Спасибо

Ответы [ 2 ]

1 голос
/ 28 марта 2010

Я могу ошибаться, но когда вы добавляете плагин в раздел <pluginManagement>, каждый субмодуль наследует его и «запускает» его.

Я думаю, что вы должны переместить ваш exec-maven-plugin и его <execution> в обычный <plugins> раздел.

0 голосов
/ 22 мая 2014

Итак, проблема в том, что вы пытаетесь сделать что-то в родительском POM. Это не то, как родительские помпы разработаны в Maven (то есть не "Maven Way" ). Вы должны выполнять действия только в «листовых узлах», родители только для агрегации и определения общего поведения, которое должно быть повторно использовано у каждого ребенка.

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

На заметку, никогда не указывайте относительные пути к файлам в maven. Вы используете "../database/schemas/import_databases.bat". Если import_databases.bat не находится в каталоге проекта, то, предполагая, что он находится в родительском каталоге, запрашивает беспорядок. Вместо этого вы должны использовать что-то вроде "$ {basedir} /src/main/scripts/import_databases.bat"

...