gpt4 book ai didi

java - Jenkins 在 Windows 虚拟驱动器上的 FileNotFound

转载 作者:可可西里 更新时间:2023-11-01 11:55:58 24 4
gpt4 key购买 nike

我有一个 Jenkins 安装(版本 1.474)在 Windows Server Enterprise 2007 机器上运行,并且通过 Jenkins 运行 Maven 测试目标时遇到问题。我的测试需要读取一个 txt 文件配置的路径,运行时出现“FileNotFound”异常:

path: file:////X:/TESTIN/file.txt
java.io.FileNotFoundException: X:\TESTIN\file.txt (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
at br.com.telecomassociates.taalarms.EncoderTest.open(EncoderTest.java:69)
at br.com.telecomassociates.taalarms.EncoderTest.readFile(EncoderTest.java:48)
at br.com.telecomassociates.taalarms.EncoderTest.testDecrypt(EncoderTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

问题在于这个文件是通过一个虚拟的windows驱动器引用的:

文件实际位于 D:/TESTOUT/TESTIN/file.txt 但我们使用了上面的命令:

subst X: D:/TESTOUT

我们在测试代码中通过 URI file:///X:/TESTIN/file.txt 引用它。

当 Jenkins/maven 运行它时,我得到一个 FileNotFound 异常,但是,当我使用“mvn test”运行相同的命令时在 Windows 命令行上,文件被正确读取:

Runs fine on mvn test

你们知道是什么导致了这个问题吗?

最佳答案

@lee-meador 和@jtahlborn 都为我指明了正确的方向。我的 Jenkins 在作为服务运行的 Tomcat 中作为 Web 应用程序运行。结果是 Jenkins 无法看到 X: 驱动器。

为了解决这个问题,我遵循了 https://code.google.com/p/psubst/ 的建议.我生成了一个包含以下内容的“.reg”文件:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"Z:"="\\??\\D:\\TESTOUT"

然后我执行它并重新启动机器。

驱动器 X: 现在对所有用户可见,Jenkins 可以完美地看到它。

关于java - Jenkins 在 Windows 虚拟驱动器上的 FileNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com