Как мне сделать что-то после того, как Maven скопирует ресурсы веб-приложения во время цели `package`? - PullRequest
7 голосов
/ 04 декабря 2011

Как мне сделать что-то после того, как Maven скопирует ресурсы веб-приложения в каталог war внутри цели package? Я хочу сделать что-то сразу после того, как он скопирует ресурсы веб-приложения в каталог war цели, но только до того, как он наконец архивирует все в файл WAR.

Ответы [ 3 ]

9 голосов
/ 04 декабря 2011

Причина, по которой у вас возникли проблемы, заключается в том, что копирование ресурсов веб-приложения выполняется плагином войны , который создает войну.Это не другая фаза жизненного цикла или даже два разных действия в одной и той же фазе.Это все часть войны: цель войны .

Однако есть обходной путь.Если вы привяжете war: exploded к более ранней фазе, например prepare-package, тогда он соберет ваше разорванное веб-приложение, а затем вы можете что-то добавить, чтобы изменить файлы, которые были собраны в разорванный каталог.Затем war:war упакует измененный разобранный каталог.(Я полагаю, что в более новых версиях плагина war вам нужно установить свойство useCache, чтобы получить желаемое поведение, хотя на самом деле это не совсем то, к чему это нужно, будьте осторожны.)

7 голосов
/ 13 апреля 2012

Мне просто нужно было сделать то же самое, поэтому вот пример для egervari, чтобы показать, что говорит Райан Стюарт.

(Это использует YUI Compressor Maven Mojo для автоматической минимизации js-файлов.)

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.1.1</version>
                    <configuration>
                        <warName>${warName}</warName>
                        <useCache>true</useCache>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>exploded</goal>
                            </goals>
                      </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>yuicompressor-maven-plugin</artifactId>
                    <version>1.1</version>
                    <executions>
                        <execution>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>compress</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <excludes>
                            <exclude>**/*.min.js</exclude>
                            <exclude>**/*.properties</exclude>
                        </excludes>
                        <nosuffix>true</nosuffix>
                    </configuration>
                </plugin>           
            </plugins>
        </build>
0 голосов
/ 04 декабря 2011

Как указано в сборке жизненный цикл

prepare-package выполнить все операции, необходимые для подготовки пакета до фактической упаковки. Это часто приводит к распаковке, обработанная версия пакета. (Maven 2.1 и выше)

package взять скомпилированный код и упаковать его в распространяемый формат, такой как баночка.

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

Я не пробовал этого и, следовательно, не могу сказать, какой из них имеет власть.

...