2017-09-15 26 views
0

我有一個類通過測試罰款,並運行,如果我在Jenkins以外的單獨的Java類中調用它。它的構造具有這樣的:插件中的Jenkins FileSystem是什麼?

this.fs = FileSystems.getDefault();

後來在執行中,我添加了一個全面的檢查看空指針異常後。

if (this.fs == null) { 
    throw new Exception("No FileSystem found"); 
} 

所以,當這個插件在運行詹金斯,默認FileSystemnull並拋出異常。我原來的代碼使用Paths.get,但我已經將它切換到this.fs.getPath(stringPath);,所以我可以使用DI爲單元測試創​​建一個FileSystem

使用Paths.get在重構之前工作正常,但我不確定如何使用該方法知道正確的FileSystem,尤其是考慮到在此環境中似乎沒有設置默認值。

回答

0

使用System.out後,我意識到構造函數不能在插件更新上運行。它在保存作業配置時運行。所以當我保存作業配置時,這通過副作用解決了我的問題。原本我並沒有設置this.fs,所以更新插件並沒有運行這些新行。所以我不應該把東西放入不會用於配置的構造函數中。事後看來,這很有意義,因爲它確實是@DataBoundConstructor,這意味着它被用於來自config的數據。

0

從來沒有聽說過這樣的問題。聽起來像你的環境嚴重受損,因爲這是由Java平臺定義的。嘗試平分 - 逐步刪除插件的非關鍵部分,直到找出是哪個觸發問題。

+0

聽起來就像我會做一個虛擬插件,運行該行,看看會發生什麼,然後回來。 –