【问题标题】:Migrate frontend-maven-plugin from maven to gradle将 frontend-maven-plugin 从 maven 迁移到 gradle
【发布时间】:2016-12-08 21:06:42
【问题描述】:

我的maven 项目中有一个com.github.eirslett:frontend-maven-plugin

<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,但我找不到如何执行此操作的示例。等级迁移工具仅翻译依赖项而不翻译插件。有没有一些例子,我如何在gradle中使用frontend-maven-plugin

【问题讨论】:

标签: java gradle


【解决方案1】:

您可能找不到任何关于如何在 Gradle 中使用 frontend-maven-plugin 的示例,因为它专用于 Maven。但是你可以看看Siouan Frontend Gradle plugin,它是 Gradle 的等效解决方案,并且允许(来自官方网站):

将您的前端 NPM/Yarn 构建集成到 Gradle 中。

用法和配置似乎接近您的 Maven 配置。在 build.gradle 文件中定义 Node/NPM/Yarn 版本,根据 Gradle 生命周期任务(清理/组装/检查)链接要运行的脚本,仅此而已。以下是带有 NPM 的 Gradle 5.4 下的典型用法,摘自文档:

// 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 的初始配置将需要迁移 Node。
  • 该插件不支持 Bower,我认为将来不会支持,因为 Bower 现在鼓励迁移到 Yarn。您可以在 Bower 的网站上找到迁移指南。
  • 插件不支持使用特定的 NPM 版本。 NPM 现在与 Node 打包在一起,该插件使用下载的 Node 发行版中嵌入的版本。

问候

【讨论】:

  • 回购中的这篇文章似乎只有 4 颗星。它是一个稳定的回购吗?有人在生产中使用它吗?
  • @Tamb,我是这个插件的贡献者。我能给出的唯一答案是尝试发表意见。在项目的主页上,您将找到有关支持平台的信息。请使用问题跟踪器处理任何问题/功能请求。 BR
  • 使用这个插件,有人可以帮我在测试阶段如何运行 npm 测试。目前我正在使用checkScipt 运行。在 gradle 生命周期的测试阶段是否有替代方法。如果我的问题不够清楚,请道歉并感谢您的帮助
  • @siddhuKantipudi,不推荐使用test 任务执行npm 测试,因为该任务不是Gradle 的内置任务,专门用于运行Java 单元测试。它是 Java 插件的一部分,可以在 Gradle 项目中应用或不应用。与 Java 插件一样,该插件提供了自己的任务 checkFrontend 来运行 npm 测试。如果您的目标是同时运行 npm 和 Java 单元测试,则应使用 check 任务。如果你真的想用 test 任务运行 npm 测试,你可以在你的 build.gradle 文件中添加这一行:tasks.named('test').dependsOn('checkFrontend')
  • @vincent 我认为使用这种方法,测试任务将在测试阶段以及前端构建阶段执行两次 npm 测试?
【解决方案2】:

Google 为我找到了 Gradle Frontend Plugin。插件描述简单地说:

包装常见前端工具并提供其二进制文件的一组任务。

文档(截至 2016 年 3 月)描述了 4 个任务(installnodenpmgruntgulp)及其使用示例。


另一种选择(由@Timofei 提供)是Gradle Plugin for Node。描述说:

此插件使您可以在构建过程中使用基于 NodeJS 的技术,而无需在系统本地安装 NodeJS。它将 Gradle 与 NodeJS、Yarn、Grunt 和 Gulp 集成在一起。

(为清楚起见进行了编辑)

请注意,此插件的 Github 存储库处于活动状态,而前一个在过去两年内没有任何提交。

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多