文件未找到Maven

时间:2014-02-24 03:10:10

标签: eclipse maven filenotfoundexception

我在简单的云存储方面遇到了一些问题(simplecloud)。当我使用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>

3 个答案:

答案 0 :(得分:0)

我建议您在CreateBucketTest中发布相关的代码段。

我相信您的测试正在打开文件\var\key。显然这会导致问题,因为你想到的文件实际上不在\var\key

向您提出一些建议:

  1. 而不是从绝对路径读取,看看是否可以将其更改为类路径资源的开放流。

  2. key文件放在src/main/test/resources下。假设您将其置于src/main/test/resources/cloudkey/key

  3. 之下
  4. 通过上述设置,当您运行测试时,key文件将位于/cloudkey/key

    位置的类路径下

  5. 编辑:

    在阅读了一些代码后,我们提出了一些建议:

    首先,您的getStorage依赖于不太适合测试的系统属性。考虑以更加测试友好的方式编写代码

    但是我相信你不会重构你的代码,这是你可以做的一种方式:

    1. key放入/src/test/resources。通过这样做,在编译时,key将被放入BASE_DIR/target/test-classes/key
    2. 这里我假设你的所有测试只有一把钥匙。您需要做的是使用正确的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