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

标签 java sqlite maven relative-path persistence.xml

我的项目使用 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 应用程序交互时,出现权限错误。输入绝对路径(如第一个示例)可以解决该问题。绝对路径真的是强制性的吗?

我正在寻找的行为类似于 - 比方说 - cmakeCMAKE_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/

相关文章:

java - 如何将 @Scheduled 与配置文件结合使用

java - Android API 24 GNSSMeasurement 的构造函数不公开

java - 自动为 JWS 应用程序安装证书

java - 组织.jetbrains :annotations doesn't work when running Maven tests manually

linux - Maven - 将属性文件从 SVN 复制到基于 Linux 的应用程序服务器计算机

2 台 PC 之间的 Java RMI

sqlite - 是否可以在 sqlite 中创建临时索引?

sql - 当项目是文本时,使用SQL从数据库对项目进行排序

mysql - 数据库设计: User can be part of many lists,并且列表可以与多个用户关联

maven - Web应用程序中的Elasticsearch Java API错误:java.lang.NoClassDefFoundError:无法初始化类org.elasticsearch.threadpool.ThreadPool