Java 在本地运行应用程序时无法从资源文件夹加载文件
使用Java8,我有一个AWS lambda函数,它在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
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上传函数时的文件夹结构有点不同。