使用JHipster框架的过程中,经常会遇到需要使用单元测试的情景,在windows系统中,由于环境变量配置的原因,会遇到一些错误,如下:
org.testcontainers.containers.ContainerLaunchException: Container startup failed
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:322)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:302)
通过异常处的代码追踪,可以找到报错的原因:
可以看出jdk的bin目录和jre/bin目录,前后各自多出了一个双引号字符串,造成这种现象的原因是什么呢?
通过获取这些参数的Java代码可以看出,其底层原理就是获取了Windows系统中的环境变量的Path值,做了一个拆分:
System.getenv("PATH").split(Pattern.quote(File.pathSeparator))
Windows环境变量编辑(win10搜索编辑系统环境变量):
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;"%Java_Home%\bin;%Java_Home%\jre\bin;";
通过上文的"%Java_Home%\bin;%Java_Home%\jre\bin;"可以看出,path变量中确实多出了前后的双引号。
那么解决的办法也就呼之欲出了,把java路径的bin和jre/bin做一个拆分即可。
这时候我们去调用单元测试,会发现程序依旧会报同样的错误,那么怎么办呢,答案是重启电脑即可!