2014-02-24 215 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