【问题标题】:Bazel: Java Resource folder with sqlite.dbBazel:带有 sqlite.db 的 Java 资源文件夹
【发布时间】:2019-01-10 03:18:06
【问题描述】:

您好,我正在使用 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 中。

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

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

【问题讨论】:

  • 你是如何运行 JAR 的?
  • @Jin 我不知道你的意思是什么
  • 你使用的是bazel run还是java -jar
  • @Jin 是的。我在 intellij ide 中使用 bazel 运行配置

标签: java sqlite build jar bazel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多