You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java 21环境下使用frontend-maven-plugin搭配Node.js 22时Maven构建失败(Node.js 16可正常运行)

Java 21环境下使用frontend-maven-plugin搭配Node.js 22时Maven构建失败(Node.js 16可正常运行)

看起来你碰到了一个典型的版本兼容性+配置适配问题,我来帮你梳理可能的原因和解决思路:

问题复现场景

  • 运行环境:Java 21
  • 插件版本:frontend-maven-plugin 1.13.1 / 1.15.1
  • Node.js版本:22.x(构建失败),16.x(构建成功)
  • 失败环节:npm install执行时抛出org.apache.commons.exec.ExecuteException: Process exited with an error: 1

你提供的插件配置片段:

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>1.13.1</version>
    <executions>
        <execution>
            <id>install node and npm</id>
            <goals>
                <goal>install-node-and-npm</goal>
            </goals>
            <configuration>
                <nodeVersion>v22.0.0</nodeVersion>
                <npmVersion>9.6.7</npmVersion>
            </configuration>
        </execution>
        <execution>
            <id>npm install</id>
            <goals>
                <goal>npm</goal>
            </goals>
            <configuration>
                <arguments>install</arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

可能的原因及解决步骤

1. npm版本与Node.js 22的兼容性不匹配

你指定的npmVersion: 9.6.7和Node.js 22的官方兼容版本不匹配——Node.js 22默认捆绑的是npm 10.x系列,低版本npm在高版本Node环境下可能会触发未知的兼容性问题。

解决建议

  • 移除pom.xml中的<npmVersion>配置项,让插件自动使用Node.js 22自带的npm版本;
  • 或者将npm版本升级到与Node.js 22兼容的10.x稳定版(比如10.5.0)。

2. 代理参数格式不符合npm 10.x的要求

从错误日志里的命令可以看到,你重复使用了多次--noproxy参数:

npm install --https-proxy=http://proxy.local:8080 --proxy=http://proxy.local:8080 --noproxy=localhost --noproxy=127.0.0.1 ...

npm 10.x(对应Node22)对--noproxy参数的解析逻辑有变化,不再支持重复声明该参数,多个无代理地址应该用逗号分隔合并成一个--noproxy参数。

解决建议
修改frontend-maven-plugin的npm配置,将所有noproxy地址合并为一个参数:

<execution>
    <id>npm install</id>
    <goals>
        <goal>npm</goal>
    </goals>
    <configuration>
        <arguments>install --https-proxy=http://proxy.local:8080 --proxy=http://proxy.local:8080 --noproxy=localhost,127.0.0.1,169.254.169.254,10.200.0.1,100.64.0.1,.svc.cluster.local,.example-domain.local,.example-tools.info,.example-collaboration.example.gov.uk</arguments>
    </configuration>
</execution>

3. frontend-maven-plugin对Node.js 22的兼容性修复

虽然你尝试了1.13.1和1.15.1,但部分版本的插件可能对Node.js 22的支持存在遗漏(比如环境变量传递、进程启动逻辑的适配)。

解决建议
尝试升级到frontend-maven-plugin的最新稳定版本,确保包含了对Node.js 22的兼容性修复。

4. 获取更详细的npm错误日志

当前的Maven错误只显示进程退出码1,没有具体的npm安装失败原因(比如某个依赖下载失败、权限问题、网络错误)。

解决建议

  • mvn clean install -X命令重新构建,查看详细的调试日志,找到npm抛出的具体错误信息;
  • 或者在插件配置中添加<verbose>true</verbose>,让frontend-maven-plugin输出更详细的npm执行日志。

验证步骤

  1. 先尝试修改代理参数格式,合并--noproxy为单一参数,重新构建;
  2. 如果问题依旧,移除<npmVersion>配置,使用Node22自带的npm;
  3. 若还是失败,升级插件到最新稳定版并查看详细日志定位具体问题。

内容来源于stack exchange

火山引擎 最新活动