如何使用SQLite数据库与相对于项目/应用程序的路径?

时间:2015-10-10 19:11:13

标签: java sqlite maven relative-path persistence.xml

我的项目使用 Maven 构建管理器以及JPA和EclipseLink与SQLite数据库进行交互。选择的IDE是 NetBeans 。但是,这个问题不应该固定在IDE上,而应该固定在它开发的应用程序中。

我想让我的应用程序生成它将在相对于应用程序位置的路径中使用的SQLite数据库文件。有没有办法在persistence.xml内指定这个,还是我必须手动编写创建文件的程序?

目前位于我<properties/>的{​​{1}}部分内(其中包括):

persistence.xml

我试过用

代替它
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:/home/user/NetBeansProjects/Cookbook/cookbook_db.sqlite"/>

这会在我的<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:cookbook_db.sqlite"/> 目录中创建一个数据库文件,但是当我尝试与我的Java应用程序进行交互时,我收到权限错误。输入绝对路径(如第一个示例中)可以解决问题。绝对路径真的是强制性的吗?

我正在寻找的行为类似于 - 让我们说 - /home的{​​{1}}。执行时cmake从该变量中提取路径,从而允许用户随意更改二进制目录。 Maven本身使用CMAKE_BINARY_DIR标记支持其cmake中的相对路径。

更新:我已添加:

pom.xml

到我的<relativePath/>,并根据@WillShackleford的建议更改了<build> ... <resources> <resource> <directory>${basedir}/src/main/resources/META-INF/</directory> <filtering>true</filtering> <includes> <include>persistence.xml</include> </includes> </resource> </resources> </build> 内我的SQLite数据库文件的JDBC URL属性:

pom.xml

但是现在我得到了:

persistence.xml

表示找不到<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:${basedir}/cookbook_db.sqlite"/>

1 个答案:

答案 0 :(得分:1)

在maven ${basedir}内应扩展到项目目录。

<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:${basedir}/cookbook_db.sqlite"/>

为persistence.xml设置过滤。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>