Запуск всех связанных экземпляров цели в командной строке - PullRequest
3 голосов
/ 23 января 2010

У меня есть куча команд SQL, связанных с фазой pre-integration-test, задача которой - создать «тестовую» базу данных и указать на нее приложение.

Иногда я хочу просто «перестроить» мою тестовую базу данных без всего остального в жизненном цикле. Например, если мой тест терпит неудачу и портит тестовую базу данных, мне, возможно, придется пересобирать ее несколько раз, пока я не выясню, в чем проблема.

Вот как выглядит мой POM:

<profile>
    <id>test-setup-teardown</id>
       <activation>
           <activeByDefault>true</activeByDefault>
       </activation>
       <build>
           <plugins>
               <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sql-maven-plugin</artifactId>
                    <version>1.3</version>

                    <dependencies>
                        <dependency>
                            <groupId>${database-dependency-groupId}</groupId>
                            <artifactId>${database-dependency-artifactId}</artifactId>
                            <version>${database-dependency-version}</version>
                        </dependency>
                    </dependencies>

                    <configuration>
                        <url>${test-database-admin-url}</url>
                        <username>${test-database-admin-username}</username>
                        <password>${test-database-admin-password}</password>
                        <driver>${database-driver}</driver>
                        <autocommit>true</autocommit>
                    </configuration>

                    <executions>
                        <execution>
                            <id>test-database-pre-setup</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <sqlCommand>${test-database-teardown}</sqlCommand>
                                <onError>continue</onError>
                            </configuration>
                        </execution>

                        <execution>
                            <id>test-database-setup</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <sqlCommand>${test-database-setup}</sqlCommand>
                            </configuration>
                        </execution>

                        <execution>
                            <id>test-database-schema</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <url>${test-database-url}</url>
                                <username>${database-user}</username>
                                <password>${database-password}</password>
                                <srcFiles>
                                    <srcFile>${basedir}/metadata/build/database/${database-engine}/appx.sql</srcFile>
                                </srcFiles>
                            </configuration>
                        </execution>

                        <execution>
                            <id>test-database-teardown</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <sqlCommand>${test-database-teardown}</sqlCommand>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

Как я могу запустить все исполнения этого профиля? Что-то вроде mvn sql:execute запускает только одно из исполнений (последнее, я думаю).

Я попытался сделать связанную фазу свойством, а затем позволить пользователю указать другой профиль, который изменяет значение по умолчанию с pre-integration-test на validate, но объясняя кому-то, почему перестройки выполняются таким образом:

mvn validate -Pforce-rebuild,test-setup-teardown

просто подтверждает тот факт, что в проектах, не связанных с игрушками, много волшебства в POM. Пожалуйста, покажи мне дорогу!

Может быть, хорошим решением будет способ запуска выполнения по идентификатору из командной строки?

Ответы [ 2 ]

1 голос
/ 23 января 2010

Может быть, хорошим решением будет способ запуска выполнения по идентификатору из командной строки?

Это невозможно. Казни предназначены для привязки к жизненному циклу.

И вызов sql:execute и передача всех параметров в командной строке не представляется жизнеспособным вариантом (это можно было сделать в пакетном скрипте, но в любом случае будет проблема с необязательным параметром srcFiles) ).

Так что, на мой взгляд, «менее худший» вариант - дублировать (вздыхать) настройку sql-maven-plugin в другом профиле, например, rebuild, чтобы связать нужные исполнения на validate фаза и объявление цели validate в качестве цели по умолчанию в этом профиле. Это позволило бы напечатать что-то вроде этого:

mvn -Prebuild

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

0 голосов
/ 23 января 2010

«тест перед интеграцией» - это фаза, которую вы можете вызвать напрямую.

mvn -Ptest-setup-teardown pre-integration-test

Это все равно будет проходить через жизненный цикл компиляции, ресурсов копирования, модульных тестов и т. Д. Вы можете попытаться добавить -DskipTests=true к команде (не уверен, пропустит ли это также и этап интеграции-теста):

mvn -Ptest-setup-teardown pre-integration-test -DskipTests=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...