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

时间:2019-12-09 16:15:41

标签: java amazon-web-services aws-lambda

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

这是我的代码:

    ClassLoader classLoader = getClass().getClassLoader();
    URL url =  classLoader.getResource( "./resources/forms/myform.pdf" );

当它作为AWS lambda运行但无法在本地运行时,此选项可以很好地进行加载。在本地运行时,url变量为null。当我在AWS上运行代码时,ClassLoader为java.net.URLClassLoader,而在本地为sun.misc.Launcher$AppClassLoader。我不确定这是否重要。

这是我的文件结构,如果有帮助的话:

enter image description here

我正在使用我的ControllerTest类。我没有使用AWS默认创建的LambdaFunctionHandlerTest。这是我的ControllerTest做的所有事情:

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中创建的文件夹结构:

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以在此处检查Maven标准目录布局: https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

所有测试类以及测试资源将被编译并放置在target / test-classes目录中。对于您的情况,getClassLoader()。getResource会将路径返回到要存储form / myform.pdf的target / test-classes目录。

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