1

根據上面的標題,我需要幫助如何創建一個對象類來執行從Maven存儲庫下載.jar依賴關係。我有一個包含三個類的JAR文件,其中包括:CommandHandler.class; KeyStroke.classMain.class和每個類都有它的依賴關係,需要下載免費的Maven倉庫。現在,我的問題是如何創建一個對象來執行在我的主程序邏輯開始執行之前執行所需的所有必要任務以下載依賴關係。因爲我相信沒有依賴關係,我的上面的類實現可能會遇到嚴重的異常...請高度讚賞任何幫助/建議/提示。提前致謝。我如何創建一個對象類來執行從Maven存儲庫下載.jar依賴關係

+0

我發現你對maven的工作原理知之甚少。一旦在POM文件中定義了依賴關係並進行安裝,所有必需的jar /依賴項就會從存儲庫中自動下載。 HTTPS://maven.apache。org/run-maven/ – Vaibs

+0

@Vaibs請注意,我沒有創建Maven項目,我的項目是在javaFX中,所以我需要的是一個對象來執行所有的下載依賴項(以編程方式)。 – Divverest

+0

感謝您糾正我們。請在你的問題中表示同樣的內容。 – Vaibs

回答

0

如果你想動態負載在運行時一個罐子,你可以做以下operation.In下面的例子中,我假設依賴的jar爲spring-context,像這樣:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.1.RELEASE</version> 
     <scope>provided</scope> 
    </dependency> 

和我得到的那個罐子的URL,http://maven.aliyun.com/nexus/content/groups/public/org/springframework/spring-context/4.3.1.RELEASE/spring-context-4.3.1.RELEASE.jar?spm=0.0.0.0.kG1Pdw&file=spring-context-4.3.1.RELEASE.jar

然後,有一個類Target取決於類包含在spring-context,並有一個方法被命名爲start

import org.springframework.format.datetime.DateFormatter; 

public class Target { 

private static DateFormatter dateFormatter; 

public void start(){ 
    System.out.println(this.getClass().getClassLoader()); 
    dateFormatter=new DateFormatter(); 
    System.out.println(dateFormatter); 
    } 
} 

接下來,我們編譯和包上面的代碼作爲命名target.jar罐,其被存儲在D:\\test\\target.jar

而接下來,我們應該在另一個罐子,將調用該方法的Targetstart instance.The聲明一個類是BootStrapBootStarp類將動態負載由同一classloadertarget.jarspring-context jar文件是一個URLClassLoader實例,因爲這樣,Target實例中的方法start可以訪問在spring-context中定義的DateFormatter類。

public class BootStrap { 


public static void main(String[] args) throws Exception{ 
    URL url = new URL("http://maven.aliyun.com/nexus/content/groups/public/org/springframework/spring-context/4.3.1.RELEASE/spring-context-4.3.1.RELEASE.jar?spm=0.0.0.0.kG1Pdw&file=spring-context-4.3.1.RELEASE.jar"); 
    URL url2= (new File("D:\\test\\target.jar").toURI().toURL()); 
    URLClassLoader classLoader = new URLClassLoader(new URL[]{url,url2}); 
    Class<?> clz = classLoader.loadClass("com.zhuyiren.Target"); 
    Object main = clz.newInstance(); 
    Method test = clz.getMethod("start"); 
    test.invoke(main); 
    } 
} 

的最後,運行BootStrap主要method.There是兩個重要的事情:

  1. BootStrap類和Target類不屬於同一個jar文件。
  2. target.jar未存儲在CLASSPATH路徑中。

,我們可以看到的結果:

[email protected] 
[email protected] 

這menas我們訪問的是spring-context JAR文件中定義成功的DateFormatter實例和spring-context沒有存儲在CLASSPATH,甚至沒有存儲在本地文件系統。

+0

感謝它真正幫助的代碼!但是如果我的依賴關係不在** sping-context ** – Divverest

+0

@Divverest這是一個例子,你可以在構造時將你的依賴jar文件添加到UrlClassLoader實例中,就像'New UrlClassLoader(new Url [] { a,b,c})'.a,b,c是jar文件的URL。 – dabaicai

+0

再次感謝!你剛剛回答我的問題,真的很感激。 – Divverest

相關問題