如何在CDK构建中指定Maven的节点版本



当我尝试使用mvn test在我的CDK Java项目上运行单元测试时,我得到一个错误,Node v8.9.1 has reached end-of-life and is not supported..

但是Node v12.22.1是我的当前版本,我在运行Maven之前检查了它。

node --version
v12.22.1
mvn test
....

奇怪的是,如果我通过IntelliJ GUI运行Maven,它可以工作。

我已经用nvm设置了我的节点版本,如果这很重要的话。我用的是Mac电脑

是否有需要设置的环境变量?CDK如何确定使用哪个节点?

任何想法?

谢谢!

全输出:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!                                                                                  !!
!!  Node v8.9.1 has reached end-of-life and is not supported.                       !!
!!  You may to encounter runtime issues, and should switch to a supported release.  !!
!!                                                                                  !!
!!  As of the current release, supported versions of node are:                      !!
!!  - ^12.7.0                                                                       !!
!!  - ^14.5.0                                                                       !!
!!  - ^16.3.0                                                                       !!
!!                                                                                  !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(node:14462) Warning: process.on(SIGPROF) is reserved while debugging
/private/var/folders/nr/dkx1p38s24nb7fx_qgcxggcm0000gn/T/jsii-java-runtime8055040669944096944/lib/program.js:467
} catch {
^
SyntaxError: Unexpected token {
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:599:28)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3

可能有两个原因。

  1. 在构建规范中,您没有将运行时环境指定为节点。即使您自己手动安装节点,并且--version命令返回它,当命令在您的代码构建上运行时,它也将使用默认值。您必须在代码构建构建规范中定义它。yaml:
phases:
install:
runtime-versions:
nodejs: 12

如果您没有指定这个运行时版本,那么任何不是直接节点命令的命令(如mvn)将自动使用8.9.1

  1. 假设你已经在你的buildspec中提供了这个,那么另一个潜在的问题是你的Codebuild Image。如果你不将Standard2.0或更高版本,那么你不能利用运行时——他们总是默认节点的基本运行时8。(参见参考代码构建可用的docker镜像)——除非你真的需要,否则你应该使用Ubuntu标准5.0。它有最新的后端代码,利用Buildspec,给你最大的控制。

值得注意的是,如果您正在使用CDK,并且您没有指定要使用的特定映像,它将自动默认为Standard1.0,并且运行时版本将被忽略。更令人恼火的是,如果你使用的是Standard1.0,它会打印一个警告,提示运行时版本被忽略,但不会停止进程…由于代码构建忽略了大多数命令的——quiet标志,它很容易在垃圾邮件中丢失。

Surefire插件正在使用我的/usr/local/bin/节点,该节点没有安装nvm。是8.9.1。我升级了那个节点版本,它可以工作了。

最新更新