我的项目使用 Maven 构建管理器以及 JPA 和 EclipseLink 来与 SQLite 数据库交互。选择的 IDE 是 NetBeans。然而,这个问题不应与 IDE 相关,而应与在 IDE 中开发的应用程序相关。
我想让我的应用程序生成 SQLite 数据库文件,它将在相对于应用程序位置的路径中使用。有没有办法在 persistence.xml
中指定这一点或者我是否必须手动编写创建文件的过程?
目前在<properties/>
内我的部分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"/>
这会在我的 /home
中创建一个数据库文件目录,但是当我尝试与我的 Java 应用程序交互时,出现权限错误。输入绝对路径(如第一个示例)可以解决该问题。绝对路径真的是强制性的吗?
我正在寻找的行为类似于 - 比方说 - cmake
的CMAKE_BINARY_DIR
。执行后cmake
从该变量中提取路径,从而允许用户随意更改二进制目录。 Maven 本身支持相对路径 pom.xml
使用<relativePath/>
标签。
更新:我添加了:
<build>
...
<resources>
<resource>
<directory>${basedir}/src/main/resources/META-INF/</directory>
<filtering>true</filtering>
<includes>
<include>persistence.xml</include>
</includes>
</resource>
</resources>
</build>
给我的pom.xml
还更改了我的 persistence.xml
中的 SQLite 数据库文件的 JDBC URL 属性正如 @WillShackleford 所建议的:
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:${basedir}/cookbook_db.sqlite"/>
但是现在我得到:
javax.persistence.PersistenceException: No Persistence provider for EntityManager named CookbookPU
这意味着persistence.xml
未找到。
最佳答案
在 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>
关于java - 如何使用相对于项目/应用程序的路径的 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33057926/