2013-05-28 33 views
0

我在Windows Server Enterprise 2007計算機上運行Jenkins安裝(版本1.474)和 我在通過Jenkins運行maven測試目標時遇到問題。我的測試需要讀取一個txt文件中 配置的路徑和我得到「FileNotFound」異常運行時:Jenkins在Windows虛擬驅動器上找不到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文件中引用它在我們的測試代碼:/// X:/ TESTIN /file.txt。

當詹金斯/ Maven的運行它,我得到一個FileNotFound例外,但是,當我使用「MVN測試」 Windows命令行中運行相同的命令文件被正確讀取:

Runs fine on mvn test

你們有什麼想法可能導致這個問題?

+2

詹金斯是否在與命令行相同的用戶下運行? –

+1

我的猜測是,jenkins作爲服務用戶運行,沒有映射驅動器。 – jtahlborn

回答

0

@ lee-meador和@jtahlborn都指出我正確的方向。我的Jenkins作爲一個作爲服務運行的Tomcat內部的Web應用程序運行。原來,詹金斯無法看到X:驅動器。

爲了解決這個問題,我遵循https://code.google.com/p/psubst/的建議。我生成了以下內容的「.reg」文件:

REGEDIT4 

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

然後我執行它並重新啓動機器。

驅動器X:現在對所有用戶都可見,Jenkins可以完美地看到它。

相關問題