我們有一個獨立的java應用程序。該應用程序具有許多功能,但大多數客戶只使用這種功能的一小部分。我們希望僅使用「正常」的第三方jar文件來分發應用程序。 在eclipse項目中,所有外部jar文件都在類路徑中。所以沒有反射用於實例化類。因此,當用戶打算使用更高級的功能時,例如拍攝webcamera圖片時,我們將下載所有javacv jar文件,然後在調用我們的需要照片的類之前將它們添加到classpath/classloader中。這可能嗎?我已經爲一個非常小的模塊提供了一個工作解決方案,它可以即時下載一些jar文件並將它們添加到自定義類加載器中,但是我必須痛苦地實例化每個類並通過反射調用每種方法。例如:在運行時下載jar文件並將其添加到classpath中
URLClassLoader loader = new URLClassLoader(urls,w.getClass().getClassLoader());
Class grabberClass = Class.forName("org.bytedeco.javacv.FrameGrabber",true,loader);
Object grabber = grabberClass.getMethod("createDefault", int.class).invoke(null, 0);
grabberClass.getMethod("start", null).invoke(grabber, null);
//And so on...
這不是我們想要的。我們所有的源代碼都很好,我不想通過將它變成反射調用來混淆它。但是,我怎樣才能使用我的舊代碼,並且仍然能夠在運行時添加jar文件?
謝謝你的回答。我之前使用過webstart,但不知道懶惰選項。這似乎是做我想要的。聖誕節後我會嘗試這個解決方案。 – runholen