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