1 回答

TA貢獻2019條經驗 獲得超9個贊
這就是您在 Bazel 中訪問數據文件的簡單方式……您從 WORKSPACE 根目錄指定文件的完整路徑。如果您的文件有目標//services/app1:config.yml,那么路徑就是serivces/app1/config.yml.
$PWD除非出于某種原因需要絕對路徑,否則無需添加前綴。這樣做的首選方法是:
const config = "services/app1/config.yml"
abs, err := filepath.Abs(config)
if err != nil {
return err
}
這假設您沒有調用 chdir... 我避免在我的程序中調用 chdir,主要是因為這個原因。
請注意,它不是 URL,如果您需要 URL,您可以:
u := url.URL{Scheme: "file", Path: filepath.ToSlash(abs)}
另請注意,如果您正在處理多個存儲庫中的文件,則必須包含存儲庫,前綴為"external". 例如,@some-repo//dir/pkg:targetis external/some-repo-dir/pkg/target... 即使它只是":target"在您的 BUILD 文件中。呃,對吧?
為什么巴澤爾會這樣做?
您的代碼可能會將來自您工作區的所有包鏈接在一起。看起來很明顯,在您的情況下,您只是希望能夠config.yml從與包相同的目錄中讀取,但您同樣可以傳遞data = ["config.yml"]給.go_library()deps
為了讓它在任何地方都能正常工作,每個人都需要使用數據文件的完整路徑。這有點冗長,但是哦。
如果您僅調用go_binaryfrom agenrule或 build 規則而不是bazel run,則可以根據需要將配置文件的路徑作為命令行參數傳遞。這將允許您在沒有完整路徑的情況下指定它。
- 1 回答
- 0 關注
- 131 瀏覽
添加回答
舉報