2014-02-24 152 views
0

我在簡單雲存儲方面遇到了一些問題(simplecloud)。當我與Maven運行控制檯輸出以下錯誤:未找到文件Maven

java.io.FileNotFoundException: \var\key (The system cannot find the path specified) 

源代碼是在這裏:src git

然而,它存在於目錄如下所示:

任何想法?

在此先感謝

enter image description here

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.pliablematter</groupId> 
<artifactId>simple-cloud-storage</artifactId> 
<version>1.0-SNAPSHOT</version> 
<name>Simple Cloud Storage</name> 
<description>A simple wrapper around the Google Cloud Storage API</description> 

<dependencies> 
    <dependency> 
     <groupId>com.google.http-client</groupId> 
     <artifactId>google-http-client-jackson2</artifactId> 
     <version>1.15.0-rc</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.apis</groupId> 
     <artifactId>google-api-services-storage</artifactId> 
     <version>v1beta2-rev6-1.15.0-rc</version> 
    </dependency> 



    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>LATEST</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

+0

從junit你應該使用一個特定的版本和**不** ** LATEST'的原因,如果一個新的版本出來你的構建可能會失敗。換句話說,你的構建是不可重現的。 – khmarbaise

+0

@David,DId你解決了這個問題?我遇到了同樣的問題。請給我解決這個問題的解決方案? –

+0

嘿,當我把鑰匙放在文件夾中:/ simple-cloud-storage/src/main/resources/var /並做了一個乾淨的maven構建項目正在運行,我有一個工作的JAR文件。有時候測試沒有通過,因爲你被限制每秒執行x次請求,但是我認爲它有1分之一的效果。 – David

回答

0

我建議你張貼在你CreateBucketTest相關代碼段。

我相信你的測試你打開一個文件\var\key。顯然,這是怎麼回事,因爲你所想的文件是不是真的位於\var\key

一些建議,使問題您:

  1. 而不是從絕對路徑讀書,看看你是否可以把它改成爲類路徑資源開放流。

  2. 將您的key文件置於src/main/test/resources之下。假設你把它下src/main/test/resources/cloudkey/key

  3. 通過以上的設置,當您運行測試時,key文件將在類路徑下的位置/cloudkey/key


編輯:

後讀一下你的代碼,這裏有一些建議:

首先,你的getStorage r系統屬性上的elies對測試不太友好。考慮編寫更測試友好的方式

代碼但是我相信你不會無論如何重構你的代碼,這裏是你可以做的一種方法:

  1. key/src/test/resources。通過這樣做,編譯時,key將被放到BASE_DIR/target/test-classes/key
  2. 在這裏,我假設你將只有1個關鍵所有的測試。您需要做的是使用正確的路徑key設置系統屬性private.key.path。你可以通過配置surefire插件來實現:http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html。添加一個systemPropertyVariablesprivate.key.path,其值爲${project.build.testOutputDirectory}/key。通過這樣做,當您的測試運行時,系統屬性private.key.path將被設置爲正確的值,以便您的測試應該正常運行。
+0

我更新了帖子。我做了你的建議,但仍然在錯誤上運行。我甚至將它放在項目的每個地圖中,但仍然沒有效果。 – David

+0

他們的關鍵是你如何閱讀文件。它無處不在,無處不在。嘗試瞭解在src /'下放置的文件會發生什麼,以及它如何提供給您的測試 –

0

確保您的\ var \ key目錄存在於Maven爲構建創建的目標目錄中。我會肢體出去,猜測現在可能不在那裏。如果必須在非標準位置使用\ var \鍵,則可以使用Maven Resources Plugin將其複製到目標目錄中。正如@Adrian Shum所建議的那樣,測試\資源是Maven尋找它的標準地方。

編輯:

好像你想探索這個選項,所以這裏是如何您可能會在你的Maven POM使用Maven Resources插件...

裏面下構建的插件節點,添加:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.6</version> 
</plugin> 

然後再內搭插件節點之後,添加你需要複製到目標目錄或目錄,例如:

<resources> 
    <resource><directory>src/main/resources</directory></resource> 
</resources> 
<testResources> 
    <testResource><directory>src/var/key</directory></testResource> 
    <testResource><directory>src/test/resources</directory></testResource> 
</testResources> 
+0

我剛剛將我的var文件夾放入目標目錄,但運行該文件夾時會消失並且報告已到位。 – David

+0

是的,這就是爲什麼我提到你應該使用Maven Resources Plugin將資源複製到目標目錄。如果你能夠將你需要的項目重新定位到測試/資源樹,那麼不用擔心,但是 - 我發現Maven真的不喜歡與它戰鬥。 – unigeek

+0

添加示例,以防您必須使用maven-resources-plugin。你可能需要擺弄你爲它複製的目錄 - 也許你想要src/var而不是src/var/key。只需讓它與代碼同步,以便它可以看到目標目錄中存在的資源。 – unigeek

0

刪除最初的\。另外,正如其他人指出的那樣,由於這顯然是一個測試鍵(按名稱來判斷),因此您應該將其置於src/test/resources/var/key之下,並將代碼更改爲僅查找var/key/test.p12

+0

它需要是絕對路徑而不是相對的(不知道) – David