Перенесите плагин frontend-maven с maven на gradle

У меня есть com.github.eirslett:frontend-maven-plugin в моем проекте maven.

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>0.0.27</version>

    <executions>

        <execution>
            <id>install node and npm</id>
            <goals>
                <goal>install-node-and-npm</goal>
            </goals>
            <phase>generate-resources</phase>
        </execution>

        <execution>
            <id>npm install</id>
            <goals>
                <goal>npm</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
                <arguments>install</arguments>
            </configuration>
        </execution>

        <execution>
            <id>bower install</id>
            <goals>
                <goal>bower</goal>
            </goals>
            <phase>generate-resources</phase>

            <configuration>
                <arguments>install</arguments>
                <workingDirectory>${basedir}/src/main/webapp</workingDirectory>
            </configuration>
        </execution>

    </executions>

    <configuration>
        <nodeVersion>v4.2.4</nodeVersion>
        <npmVersion>2.7.1</npmVersion>
        <nodeDownloadRoot>https://nodejs.org/dist/</nodeDownloadRoot>
        <npmDownloadRoot>https://registry.npmjs.org/npm/-/</npmDownloadRoot>
        <workingDirectory>${basedir}/src/main/webapp</workingDirectory>

    </configuration>
</plugin>

Теперь мне нужно перенести его в gradle, но я не могу найти примеры, как это сделать. Инструмент миграции класса переводит только зависимости, но не плагины. Есть ли некоторые примеры, как я могу использовать frontend-maven-plugin в gradle?

Ответ 1

Вы можете не найти какого-либо примера использования frontend-maven-plugin в Gradle, поскольку он посвящен Maven. Но вы можете взглянуть на плагин Siouan Frontend Gradle, который является эквивалентным решением для Gradle и позволяет (с официального сайта):

Интегрируйте свой внешний интерфейс NPM/Yarn в Gradle.

Использование и конфигурация кажутся близкими к вашей конфигурации Maven. Определите версию Node/NPM/Yarn в файле build.gradle, свяжите сценарии, которые вы хотите запустить, в зависимости от задачи жизненного цикла Gradle (очистка/сборка/проверка) и все. Ниже приведен типичный пример использования Gradle 5.4 с NPM, взятый из документации:

// build.gradle
plugins {
    id 'org.siouan.frontend' version '1.1.0'
}

frontend {
    nodeVersion = '10.15.3'
    // See 'scripts' section in your 'package.json file'
    cleanScript = 'run clean'
    assembleScript = 'run assemble'
    checkScript = 'run check'
}

Вы заметите:

  • В отличие от frontend-maven-plugin там нет декларации/конфигурации для запуска сборки фронтэнда с Gradle, так как она уже предоставлена из коробки. Загрузка, установка Node/NPM/Yarn не требует декларации/конфигурации - кроме номеров версий, а также задач сборки. Просто предоставьте командную строку NPM/Yarn для очистки/сборки/проверки вашего интерфейса.
  • Максимально поддерживаемая версия Node должна быть 6.2.1. Таким образом, ваша первоначальная конфигурация с 4.2.4 потребует переноса узла.
  • Плагин не поддерживает Bower, и я не думаю, что он будет поддерживаться в будущем, поскольку Bower теперь поощряет миграцию на Yarn. Вы найдете руководство по миграции на сайте Bower.
  • Плагин не поддерживает использование определенного выпуска NPM. NPM теперь поставляется вместе с Node, плагин использует версию, встроенную в загруженный дистрибутив Node.

С уважением

Ответ 2

Google нашел плагин Gradle Frontend для меня. Описание плагина просто говорит:

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

В документации (по состоянию на март 2016 года) описаны 4 задачи (installnode, npm, grunt и gulp) и примеры их использования.


Альтернативой (предоставляемой @Timofei) является плагин Gradle для Node. В описании сказано:

Этот плагин позволяет вам использовать технологии на основе NodeJS как часть вашей сборки, не устанавливая NodeJS локально в вашей системе. Он объединяет Gradle с NodeJS, Yarn, Grunt и Gulp.

(Отредактировано для ясности)

Обратите внимание, что этот плагин Github repo активен, в то время как предыдущий не имел никаких коммитов за последние два года.