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

How to specify node version for Maven in CDK Builds

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

但是 Node v12.22.1 是我当前的版本,我在 运行ning 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. 在您的构建规范中,您没有指定 runtime env 作为节点。即使您自己手动安装节点,并且 --version 命令 returns 它,当您的代码构建上的命令 运行 时,它将使用默认值。您必须在您的代码构建 buildspec.yaml 中定义它:
    phases:
      install:
         runtime-versions:
           nodejs: 12

如果您不指定此 运行time-version,那么任何命令 运行 - 例如 mvn - 不是直接节点命令将自动使用 8.9.1

  1. 假设您已经在您的构建规范中提供了这个,那么另一个潜在的问题是您的 Codebuild 图像。如果您未设置为 Standard2.0 或更高版本,那么您 无法使用 运行 次 - 它们将始终默认为节点的基础 运行 次8.(参见 this reference for docker images on codebuild available )——除非你真的需要,否则你应该使用 Ubuntu 标准 5.0。它具有使用 Buildspec 的最新后端代码,并为您提供最大程度的控制。

值得注意的是,如果您使用的是 CDK,并且您没有指定 specific image to use,它会自动默认为 Standard1.0,并且 运行time-versions 将被忽略。更烦人的是,如果你在 Standard1.0 中,它会打印一条警告,指出 运行time-versions 被忽略但不会停止进程......并且由于代码构建忽略了大多数命令的 --quiet 标志,它可以非常容易迷失在垃圾邮件中。

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