【发布时间】:2015-10-10 19:11:12
【问题描述】:
我的项目使用 Maven 构建管理器以及 JPA 和 EclipseLink 来与 SQLite 数据库进行交互。选择的 IDE 是 NetBeans。然而,这个问题不应该锚定在 IDE 上,而应该锚定在其中开发的应用程序上。
我想让我的应用程序生成 SQLite 数据库文件,它将在相对于应用程序位置的路径中使用。有没有办法在persistence.xml 中指定这一点,还是我必须手动编写文件创建过程?
目前在我的persistence.xml 的<properties/> 部分内(除其他外):
<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,并按照@WillShackleford 的建议将我的persistence.xml 中的SQLite 数据库文件的JDBC URL 属性更改为:
<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。
【问题讨论】:
标签: java sqlite maven relative-path persistence.xml