我在简单的云存储方面遇到了一些问题(simplecloud)。当我使用Maven运行时,控制台输出以下错误:
java.io.FileNotFoundException: \var\key (The system cannot find the path specified)
源代码在这里:src git
但它存在于如下所示的目录中:
有什么想法吗?
提前致谢
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 :(得分:0)
我建议您在CreateBucketTest
中发布相关的代码段。
我相信您的测试正在打开文件\var\key
。显然这会导致问题,因为你想到的文件实际上不在\var\key
向您提出一些建议:
而不是从绝对路径读取,看看是否可以将其更改为类路径资源的开放流。
将key
文件放在src/main/test/resources
下。假设您将其置于src/main/test/resources/cloudkey/key
通过上述设置,当您运行测试时,key
文件将位于/cloudkey/key
编辑:
在阅读了一些代码后,我们提出了一些建议:
首先,您的getStorage
依赖于不太适合测试的系统属性。考虑以更加测试友好的方式编写代码
但是我相信你不会重构你的代码,这是你可以做的一种方式:
key
放入/src/test/resources
。通过这样做,在编译时,key
将被放入BASE_DIR/target/test-classes/key
。 private.key.path
路径设置系统属性key
。您可以通过配置surefire插件来完成此操作:http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html。添加值systemPropertyVariables
的{{1}} private.key.path
。通过这样做,当您的测试运行时,将使用正确的值设置sys属性${project.build.testOutputDirectory}/key
,以便您的测试运行正常。答案 1 :(得分:0)
确保您的\ var \ key目录存在于Maven为构建创建的目标目录中。我会走出困境,猜猜它现在可能不存在了。如果您必须在非标准位置使用\ var \ key,则可以使用Maven Resources Plugin将其复制到目标目录中。正如@Adrian Shum建议的那样,测试\资源将是Maven寻找它的标准位置。
编辑:
好像你想探索这个选项,所以这里是你如何在你的Maven POM中使用Maven Resources Plugin ...
在构建中的插件节点内,添加:
<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>
答案 2 :(得分:0)
删除最初的\
。另外,正如其他人所指出的,因为这显然是一个测试密钥(根据名称判断),您应该将其置于src/test/resources/var/key
下并更改代码以仅查找var/key/test.p12
。