我正在將一些集成測驗從 gradle 遷移到應用程式的 bazel。作為集成測驗的一部分,資源的加載方式如下
final String resourcePath = SomeClass.class.getResource("/test.properties").getPath()
如果我跟蹤這個代碼路徑,當我從 IntelliJ 運行這個測驗時,對于 gradle,這個路徑是一個絕對路徑,比如
/Users/me/..../test.properties
但是,在 bazel 的情況下,它看起來像
file:/private/var/tmp/_bazel_me/4f1994ece960b360388a372b5e6aa4b2/execroot/project/bazel-out/darwin-fastbuild/bin/project/src/integrationTest/package/Test.jar!/test.properties
所以這個字串 resourcePath 被提供給一個加載的框架
Files.exists(resourcePath)
這適用于絕對路徑,但不適用于基于 jar 的路徑。由于我無法控制框架代碼,我該如何解決這個問題?
uj5u.com熱心網友回復:
如果您使用resourcesjava_test 或 java_library的屬性,那么資源確實被打包在該目標的 jar 中:https ://docs.bazel.build/versions/main/be/java.html#java_test.resources
聽起來您可能想嘗試該data屬性,它將檔案放在 runfiles 目錄(即執行測驗/二進制檔案的目錄)中。在此處查看答案:如何通過 Bazel 從 JUnit 測驗執行中找到 Java 源代碼檔案的路徑
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408793.html
標籤:
上一篇:Java“錯誤:不兼容的型別:推理變數E的邊界不兼容”錯誤
下一篇:未能加載庫liblwjgl.so
