java - 访问 Java[Maven] 项目中的资源

标签 java maven resources classloader

一劳永逸地解释如何正确访问DATABASEHTML 文件等资源。

假设我的 Maven JavaFX 项目看起来像这样(检查图像)。

http://s30.postimg.org/lacoynzv5/image.png

它有它的

src/main/java

src/main/resources

在构建路径中

Build path

在内部资源中,我有一个包含数据库 的文件夹和一个包含html 文件 的文件夹。

这是我访问数据库的方式,当我在 IDE 中运行它时它可以工作,但是在 mvn native

之后打包或运行 .exe 文件后不起作用
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:src/main/resources/DB/SeeYourUse.sqlite");

以下是我如何访问我的 HTML 文件 以在 WebView

中使用它
String url = Main.class.getResource("/HTML/help.html").toExternalForm();  
webEngine.load(url);

它确实可以在 IDE 中运行(jfx:运行并作为 java 应用程序运行),但在部署后没有机会运行它。

这是我在运行并记录时遇到的错误。

java.sql.SQLException: path to 'src/main/resources/DB/SeeYourUse.sqlite': 'E:\Programming\Java\Work\SeeYourUse\target\jfx\native\SeeYourUse-0.0.1-SNAPSHOT\app\src' does not exist

问题是: 如何正确加载数据库和 HTML 以最大限度地使用它?

最佳答案

src/main/resources 被直接复制到你的 jar 文件中,target/classes 也是如此。您可以通过返回资源 URL 的 class.getResource(String name) 访问资源,也可以通过将打开流的 Class.getResourceAsStream(String name) 访问资源.但是,在您的数据库的特定情况下,我不会将资源放在 jar 文件中,因为 jdbc 驱动程序直接从文件系统加载数据库文件。您应该通过打开数据库流并将其写入外部目录来将数据库提取到外部位置,至少在它不存在的情况下。

对于 html 文件,如果是此类静态资源,您可以检索 URL 并直接使用它们,如上所述。但是请注意,网络引擎将无法使用从 html 文件引用的其他资源,除非您可以替换它用于查找它们的逻辑。在这种情况下,我什至会将 html 文件及其依赖的所有文件提取到一个临时位置。

关于java - 访问 Java[Maven] 项目中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865042/

相关文章:

java - 如何从 Java JAR 文件中获取资源/文件的路径

node.js - Azure 上的 NodeJS : systematic 404 error on resource files

.net - AssemblyResolve 总是被提升,要求 MyAssembly.resources

java - 如何在一种方法中过滤一个或多个属性?

java - 命名查询中的 HQL 错误

image - 我看不到我的 wicket 项目的任何图像,我只看到图像名称?

java - 通过可执行 JAR 从 cmdline 执行 Cucumber 测试,无需 Maven

java - 使用 Jackson 映射 Json 时出现问题

java - 为什么 Java 中的同步可以保留多个线程更新的状态的可见性

java - IntelliJ Maven "Error: Invalid or corrupt jarfile"