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

时间:2016-03-08 10:36:11

标签: java maven resources classloader

一劳永逸,解释如何正确访问 DATABASE HTML 文件等资源。

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

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

它有它的

  

的src /主/ JAVA

  

的src /主/资源

构建路径中的

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以便最多能够使用它?

1 个答案:

答案 0 :(得分:1)

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

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