嗨,我使用 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)
我收到一个异常,表明该文件没有存在。
- 如何构建才能使 db 文件不捆绑到 jar 文件中?我想这就是找不到该文件的原因。我想我必须直接将数据库文件构建到类路径上..
- 否则我在这里做错了什么!在 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/