You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven多模块项目中使用frontend-maven-plugin安装Angular遇问题

问题分析与解决方案

核心问题:Node.js与npm版本不兼容导致404

你配置的nodeVersion: v20.17.0和npmVersion: v8.5.1版本不匹配。Node.js v20.x系列默认捆绑的npm版本是v10.x(比如v20.17.0对应的npm是v10.8.2),而npm v8.5.1是对应Node.js v16.x的版本,插件尝试从官方源下载对应Node.js v20的npm v8.5.1时,找不到资源,所以返回404。


针对你的疑问逐一解答

1. POM配置是否存在缺失或错误?

有两处关键问题:

  • 版本不匹配:如上所述,Node.js和npm版本绑定关系错误,这是404的根源。
  • 子POM配置冗余:子POM里仅声明插件但省略配置,会直接继承父POM的配置,若子模块的工作目录和父POM的workingDirectory不一致,会导致后续npm命令执行路径错误。如果子模块不需要单独配置,建议直接删除子POM中的该插件声明,避免继承冲突。

修正后的父POM配置(使用Node.js v20对应默认的npm版本):

<build>
  <plugins>
    <plugin>
      <groupId>com.github.eirslett</groupId>
      <artifactId>frontend-maven-plugin</artifactId>
      <version>1.15.0</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>
      </executions>
      <configuration>
        <nodeVersion>v20.17.0</nodeVersion>
        <!-- 去掉手动指定的npmVersion,使用Node.js捆绑的默认版本 -->
        <!-- <npmVersion>v8.5.1</npmVersion> -->
        <workingDirectory>ltq-webapp/src/main/webapp/web</workingDirectory>
      </configuration>
    </plugin>
  </plugins>
</build>

如果必须指定npm版本,要选和Node.js v20兼容的版本,比如v10.8.2。

2. npm install目标是否需在特定Maven阶段执行?

generate-resources阶段是合理的,这个阶段在编译Java代码之前,适合提前安装前端依赖。如果需要在打包前执行,也可以用prepare-package阶段,但generate-resources完全满足需求,不需要调整。

3. 无论是否包含package.json都无法解决问题,原因是什么?

因为你的错误出现在下载npm的阶段(install-node-and-npm目标),还没到执行npm install的步骤,所以有没有package.json不影响这个404错误。只有当npm成功安装后,npm install才会读取package.json下载依赖。

4. 是否需先手动执行npm init或npm install命令?

不需要。插件的设计就是自动完成Node.js、npm的安装,以及npm install的执行。手动执行反而可能导致本地环境和插件管理的环境冲突,建议保持插件管理的独立性,删除本地的node_modules和package-lock.json,让插件从头执行。

5. 如何解决该错误脚本问题?

按以下步骤操作:

  1. 修正版本匹配:删除父POM中手动指定的npmVersion,或替换为与Node.js v20兼容的版本(比如v10.8.2)。
  2. 清理本地缓存:执行mvn clean,同时删除插件缓存目录(默认在~/.m2/repository/com/github/eirslett/frontend-maven-plugin/node/),避免残留错误版本的安装包。
  3. 验证工作目录:确保workingDirectory指向的路径存在,且该路径下有package.json(当插件执行npm install时需要)。
  4. 移除子POM冗余配置:如果子模块不需要单独配置前端插件,直接删除子POM中的插件声明,避免继承问题。

内容的提问来源于stack exchange,提问作者Hamouda Elyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:57:10