【问题标题】:How to specify resourses path in a Java library?如何在 Java 库中指定资源路径?
【发布时间】:2021-12-05 16:20:57
【问题描述】:

我准备了一个 Java 库,它可以从特定的 json 文件生成可下载的 PDF 和 HTML。 该库包含一个控制器,可以调用该控制器来访问带有下载 HTML 和 PDF 文件的链接的页面。我想将控制器与 Thymeleaf 一起使用。

唯一的问题是,当我将库添加到项目时,库无法访问 jar 文件中的资源 - 我在 PDF 中使用的 *.jpeg 文件和我想与控制器一起使用的 *.html。

文件本身位于库的 *.jar 文件中,但是当我运行项目时,当应用程序尝试读取图像时出现 IO 异常。我尝试了不同的写入文件路径的方法,但即使我在库中硬编码图像的绝对路径,它也不起作用。

onOpenDocumentjava.io.FileNotFoundException: /home/nikiforov-java/.m2/repository/ru/companyname/libname/LibName/1.0-SNAPSHOT/LibraryName-1.0-SNAPSHOT.jar!/img/image.jpeg

Image 类来自 OpenPdf 库 - import com.lowagie.text.Image; 这就是我尝试读取 jpeg 文件的方式:

public Image image;
image = Image.getInstance("/home/nikiforov-java/.m2/repository/ru/companyname/libname/LibName/1.0-SNAPSHOT/LibraryName-1.0-SNAPSHOT.jar!/img/image.jpeg");

在提取到库之前,代码在主项目中,资源没有问题。当我将此功能提取到库中时,问题出现了。

如果是 HTML 模板 (documentation.html),我也遇到了异常: [o.s.web.servlet.DispatcherServlet] - 无法完成请求:javax.servlet.ServletException:无法解析名称为“dispatcherServlet”的 servlet 中名称为“documentation”的视图。

我尝试使用 spring.thymeleaf.prefix 更改 Thymeleaf 资源,但没有帮助。

暂时我只是不使用 *.jpeg 文件并从我的控制器返回硬编码的 HTML 字符串。

请帮助我找出我做错了什么。谢谢。

【问题讨论】:

  • 您究竟是如何加载文件的?请出示相关代码
  • @dunni,这就是我尝试读取 jpeg 文件的方式:public Image image; Image = Image.getInstance("/home/nikiforov-java/.m2/repository/ru/companyname/libname/LibName/1.0-SNAPSHOT/LibraryName-1.0-SNAPSHOT.jar!/img/image.jpeg"); Image 类来自 OpenPdf 库 - import com.lowagie.text.Image; 当然,我不想使用绝对路径文件。在提取到库之前,代码在主项目中,资源没有问题。当我将此功能提取到库中时,问题出现了。

标签: java spring jar thymeleaf


【解决方案1】:

问题就这样解决了:

import com.lowagie.text.Image;
....
public class PageNumbersWatermark extends PdfPageEventHelper {

    public Image headerImage;
...
    public void onOpenDocument(PdfWriter writer, Document document) {

        URL resourceUrl = getClass().getResource("/img/logo.gif");
        headerImage = Image.getInstance(resourceUrl);
....
    }
}

public final class Class 中的public URL getResource(String name) 查找具有给定名称的资源。

在此代码中使用了截断的 OpenPdf 库。

*.gif 文件位于资源目​​录 (projectname/src/main/resources/img/logo.gif)。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2011-04-05
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多