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

я есть веб-проект, созданный с помощью Maven, и я пытаюсь найти наилучший способ компиляции файлов JavaScript с помощью компилятора RequireJS (этот вопрос может также относиться к любому компилятору / минификатору).

У меня есть настройка, которая работает, но она нуждается в улучшении:

Я упаковал сторонние библиотеки JavaScript, и они загружаются как зависимости, а затем добавляются с помощью плагина WAR Overlay.

У меня есть задача плагина Exec, которая запускает компилятор RequireJSвнутри цели каталог. Я сейчас вручную запускаюexec:exec после запуска цели пакета (и, следовательно, содержимое WAR помещается в целевой каталог).

Вместо этого я хотел бы сделать компиляцию JS частью основной (Java) компиляции. Сам JS-компилятор (Require JS) загружается как зависимость во время фазы наложения WAR, которая происходит после компиляции. Итак, мне нужны файлы Require JS для загрузки и распаковки, и мне нужно запустить компиляцию JS с использованием этих файлов до / во время / после компиляции Java.

Я уверен, что может быть несколько способов достичь этого. Я ищу самое элегантное решение.

Обновление: существующие фрагменты POM

У меня есть JavaScript-зависимости, которые я заархивировал и добавил в наш менеджер репозитория:

    <dependency>
        <groupId>org.requirejs</groupId>
        <artifactId>requirejs</artifactId>
        <version>0.22.0</version>
        <classifier>repackaged</classifier>
        <type>zip</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.jqueryui</groupId>
        <artifactId>jquery-ui</artifactId>
        <version>1.8.7</version>
        <classifier>repackaged</classifier>
        <type>zip</type>
        <scope>runtime</scope>
    </dependency>

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

Эти зависимости добавляются в WAR с помощью плагина WAR Overlay:

        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <overlays>
                    <overlay>
                        <groupId>org.requirejs</groupId>
                        <artifactId>requirejs</artifactId>
                        <classifier>repackaged</classifier>
                        <type>zip</type>
                        <targetPath>lib</targetPath>
                        <includes>
                            <include>requirejs/require.js</include>
                            <include>requirejs/require/*</include>
                            <include>requirejs/build/**</include>
                        </includes>
                    </overlay>
                    <overlay>
                        <groupId>com.jqueryui</groupId>
                        <artifactId>jquery-ui</artifactId>
                        <classifier>repackaged</classifier>
                        <type>zip</type>
                        <targetPath>lib</targetPath>
                    </overlay>
                </overlays>
            </configuration>
        </plugin>

Хотя мне и не нужноrequirejs/build/** чтобы оказаться в WAR, я включил его в оверлей для получения разархивированных скриптов сборки RequireJS просто потому, что я не нашел лучшего способа.

Затем у меня есть плагин Exec, который выполняет компиляцию. Но обратите внимание, что эта задача не была добавлена ​​в обычный рабочий процесс компиляции: я должен вручную вызвать ее сmvn exec:exec после упаковка WAR сделана:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>lib/requirejs/build/build.bat</executable>
                <workingDirectory>${project.build.directory}/${project.artifactId}</workingDirectory>
                <arguments>
                    <argument>name=bootstrap</argument>
                    <argument>out=combined.js</argument>
                    <argument>baseUrl=scripts</argument>
                    <argument>optimize=closure</argument>
                    <argument>excludeShallow=plugins/manifest</argument>
                </arguments>
            </configuration>
        </plugin>

Итак, некоторые вопросы:

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

На самом деле я безуспешно пробовал кучу вещей, поэтому надеюсь, что не буду лениво публиковать огромный кусок кода и ждать ответов :) Просто я не совсем понял, как Maven нацеливается на этапы / фазы. и т.д. работают пока.

Ответы на вопрос(3)

Ваш ответ на вопрос