java - Bazel:带有 sqlite.db 的 Java 资源文件夹

标签 java sqlite build jar bazel

嗨,我使用 bazel 来构建我的 java 项目。我已经从 Maven 迁移到 bazel。一切都构建良好并运行。

项目结构

src/main/
    BUILD
    java/
         Main.java
         ...
    resources/
         sqlite.db
         ...

构建

java_binary(
    name = "app",
    main_class = "com.myapp.Main",
    runtime_deps = [":libs"],
)

java_library(
    name = "libs",
    srcs = glob(["src/main/java/**/*.java"]),
    resources = glob(["src/main/resources/**/*"]),
    deps = [...]
)

我的 main.java 中有 String dbLoc = com.google.common.io.Resources.getResource("sqlite.db") ,当我打印出 dbLoc 的位置时,我看到了bazel 构建文件的位置。它将文件捆绑到一个 jar 中。

因此,当我尝试在运行时使用 sqlite.db 文件时 java.sql.DriverManager.getConnection("jdbc:sqlite:"+ dbLoc) 我收到一个异常,表明该文件没有存在。

  1. 如何构建才能使 db 文件不捆绑到 jar 文件中?我想这就是找不到该文件的原因。我想我必须直接将数据库文件构建到类路径上..
  2. 否则我在这里做错了什么!在 Maven 中,这工作得很好...sqlite.db 位于构建后的 targes/文件夹中

最佳答案

我通过更改解决了这个问题

java.sql.DriverManager.getConnection("jdbc:sqlite:"+ dbLoc)

java.sql.DriverManager.getConnection("jdbc:sqlite::resource:"+ dbLoc)

关于java - Bazel:带有 sqlite.db 的 Java 资源文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51652133/

相关文章:

java - 在 Mongo 中使用游标迭代多个文档

java - 如何用java绘制3D形状,没有其他库或框架或任何东西

Java:提取接口(interface)仅用于测试

java - 如何修复android java中的sqliteException

java.class 文件的目录结构与源文件相同吗?

java - Callablestatement 错误:索引::1 处缺少 IN 或 OUT 参数

sqlite - 如何让sqlite查询更高效?

sql - 在进行 INNER JOIN 时使用 SQlite 删除值

Android Gradle 问题 : Caused by: groovy. lang.MissingMethodException:没有方法签名

c++ - 我如何将其编译成可执行文件