我的計算機上有一個腳本,它根據我輸入的命令運行其他腳本。這些任務經常完成,通常只需要少量參數(如更新git存儲庫)。這是使用bash腳本完成的,但我想添加更多的靈活性,所以我將它轉換爲Java。類沒有正確加載?
有一個單獨的文件用於'註冊'這些命令。我使用的語法如下:
name, alias1, alias2,... (one or more tabs) path.to.main.class
當鍵入的命令是搜索這個文件,找到正確的類路徑來加載。
name
是它是用於輸出和用於查找適當的罐子的命令的名稱(以及罐子)。然後它使用path.to.main.class
來加載該類。因爲我創建了一個抽象類extends
,所以我演示並調用了一個名爲onCommandRun
的方法,不言自明。
每個命令導出到一個罐子裏,雖然多數只需要一個類文件來運行。有一個命令需要三個類(儘管我可能只是將它們粘在同一個類中,但我不喜歡內部類)。
我的問題是,主類是JAR負載的罰款,但是當我使用它需要運行其他兩個實用類之一,我得到一個NoClassDefFoundError
/ClassNotFoundxception
而且從我的理解,在JVM在需要時加載它需要的類,那麼爲什麼加載其他類時會遇到問題?
額外:每個「命令罐子」是在比主罐控制一切一個單獨的文件夾。另外#2:將每個命令分成它自己的jar的原因是因爲控制所有命令的主jar只會運行一個命令,所以爲什麼只有一個命令會註冊所有命令(並加載)所有命令被使用,然後程序退出?另外,我希望它是動態的。
爲什麼要註冊所有命令?因爲你沒有按照自己的方式節省時間,並且動態加載很難(正如你所看到的那樣)。另外,爲什麼你會選擇Java over Bash來完成這個任務?這好像你正在重新設計Bash函數。如果你真的想這樣做,請包括一些相關的代碼。 (如何加載罐子,完整的堆棧跟蹤以及它指向的位置等) –
我的回答有用嗎? – jesseplymale