簡體   English   中英

在本地運行應用程序時無法從資源文件夾加載文件

[英]Unable to load file from resources folder when running app locally

使用 Java 8,我有一個 AWS lambda 函數,它在src/main/resources文件夾中有一個平面文件。 在 AWS 上運行時,我沒有遇到任何問題。 但是當我在本地運行時,我的應用程序找不到該文件。

這是我的代碼的樣子:

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

當它作為 AWS lambda 運行時,這適用於加載它,但在本地不起作用。 在本地運行時, url變量為空。 當我在 AWS 上運行代碼時,ClassLoader 是java.net.URLClassLoader而在本地它是sun.misc.Launcher$AppClassLoader 我不確定這是否重要。

如果有幫助,這是我的文件結構:

在此處輸入圖片說明

我正在使用我的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 中創建的文件夾結構:

在此處輸入圖片說明

您可以在此處查看 Maven 標准目錄布局: https : //maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

你所有的測試類和測試資源都將被編譯並放置在 target/test-classes 目錄中。 在您的情況下, getClassLoader().getResource 將返回要存儲 forms/myform.pdf 的 target/test-classes 目錄的路徑。

默認情況下,測試類將從您的 test-classes 目錄中查找資源。 如果在 test-classes 目錄中找不到它們,則會搜索 classes 文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM