当我尝试使用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
可能有两个原因。
- 在构建规范中,您没有将运行时环境指定为节点。即使您自己手动安装节点,并且
--version
命令返回它,当命令在您的代码构建上运行时,它也将使用默认值。您必须在代码构建构建规范中定义它。yaml:
phases:
install:
runtime-versions:
nodejs: 12
如果您没有指定这个运行时版本,那么任何不是直接节点命令的命令(如mvn)将自动使用8.9.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。我升级了那个节点版本,它可以工作了。