Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在本地运行应用程序时无法从资源文件夹加载文件_Java_Amazon Web Services_Aws Lambda - Fatal编程技术网

Java 在本地运行应用程序时无法从资源文件夹加载文件

Java 在本地运行应用程序时无法从资源文件夹加载文件,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,使用Java8,我有一个AWS lambda函数,它在src/main/resources文件夹中有一个平面文件。在AWS上运行时,我没有任何问题。但当我在本地运行时,我的应用程序找不到该文件 下面是我的代码的样子: ClassLoader classLoader = getClass().getClassLoader(); URL url = classLoader.getResource( "./resources/forms/myform.pdf" ); 当它作为AWS

使用Java8,我有一个AWS lambda函数,它在
src/main/resources
文件夹中有一个平面文件。在AWS上运行时,我没有任何问题。但当我在本地运行时,我的应用程序找不到该文件

下面是我的代码的样子:

    ClassLoader classLoader = getClass().getClassLoader();
    URL url =  classLoader.getResource( "./resources/forms/myform.pdf" );
当它作为AWS lambda运行时,这可以很好地加载它,但在本地不起作用。在本地运行时,
url
变量为空。当我在AWS上运行代码时,类加载器是
java.net.URLClassLoader
,而在本地它是
sun.misc.Launcher$AppClassLoader
。我不确定这是否重要

以下是我的文件结构(如果有帮助):

我正在使用我的
ControllerTest
类。我没有使用AWS默认创建的
lambdFunctionHandlerTest
。以下是我的
控制器测试所做的全部工作:

public class ControllerTest {

    public static void main( String[] args ) {

        MyController controller = new MyController();
        controller.create();

    }

}
有什么办法可以让它在本地和AWS上运行吗?这是Eclipse中的一个maven项目,我认为我在测试函数中执行控制器的方式是不正确的。eclipse中的运行配置是否需要更改为默认配置

更新:将我的路径更改为
forms/myform.pdf
修复了本地运行的问题。但是,它现在在作为AWS lambda函数运行时无法找到该文件。以下是在AWS中创建的文件夹结构:


您可以在此处查看Maven标准目录布局:

所有测试类以及测试资源都将被编译并放置在target/testclasses目录中。在您的例子中,getClassLoader().getResource将返回存储forms/myform.pdf的目标/测试类目录的路径


默认情况下,测试类将从测试类目录中查找资源。如果在test classes目录中找不到它们,将搜索classes文件夹。

您可以在此处检查Maven标准目录布局:

所有测试类以及测试资源都将被编译并放置在target/testclasses目录中。在您的例子中,getClassLoader().getResource将返回存储forms/myform.pdf的目标/测试类目录的路径


默认情况下,测试类将从测试类目录中查找资源。如果在test classes目录中找不到它们,将搜索classes文件夹。

资源文件夹下的文件包含在类路径中。因此,将url路径更改为url=classLoader.getResource(“forms/myform.pdf”)@Ramu,出于某种原因,我必须添加
/resources/
,才能让它在AWS上工作。我不知道为什么。我更新了我的问题。通过Eclipse上传函数时,我发现AWS中的文件夹结构有点不同。resources文件夹下的文件包含在类路径中。因此,将url路径更改为url=classLoader.getResource(“forms/myform.pdf”)@Ramu,出于某种原因,我必须添加
/resources/
,才能让它在AWS上工作。我不知道为什么。我更新了我的问题。我看到AWS中通过Eclipse上传函数时的文件夹结构有点不同。