2014-11-04 45 views
0

我們有一個自定義生成工具,它依賴於常春藤功能來解決依賴關係。依賴關係的配置不是ivy.xml文件,而是一個自定義配置,它允許......好,不相關。關鍵是我們以編程方式使用常青藤。以編程方式使用常春藤提取源

給定的依賴(組ID,工件ID,版本),我們創建了一個ModuleRevisionId:

ModuleRevisionId id = ModuleRevisionId.newInstance(orgName, moduleName, revisionName); 

後跟一個ModuleDescriptor。這是,我猜,我沒有足夠的說服力告訴常春藤我既想要目標庫jar文件也要源。我只是不確定什麼是DependencyConfiguration,而不是創建ModuleDescriptor時的「配置」。

DefaultModuleDescriptor md 
    = new DefaultModuleDescriptor(
     ModuleRevisionId.parse("org#standalone;working"), 
     "integration", 
     new java.util.Date()); 
DefaultDependencyDescriptor mainDep 
    = new DefaultDependencyDescriptor(id, /* force = */ true); 
mainDep.addDependencyConfiguration("compile", "compile"); 
mainDep.addDependencyConfiguration("compile", "sources"); 
md.addDependency(mainDep); 
md.addConfiguration(new Configuration("compile")); 
md.addConfiguration(new Configuration("sources")); 

我也沒有真正理解上述與RetrieveOptions vs. ResolveOptions。

我需要一杯飲料。

回答

0

好吧,所以花了一段時間,但我終於圍繞着這些。

// define 'our' module 
DefaultModuleDescriptor md 
    = new DefaultModuleDescriptor(ModuleRevisionId.parse("org#standalone;working"), 
           /* status = */ "integration", 
           new java.util.Date()); 
// add a configuration to our module definition 
md.addConfiguration(new Configuration("compile")); 

// define a dependency our module has on the (third party, typically) dependee module 
DefaultDependencyDescriptor mainDep = new DefaultDependencyDescriptor(md, dependeeModuleId, /* force = */ true, false, true); 
mainDep.addDependencyConfiguration("compile", "default"); 
mainDep.addDependencyConfiguration("compile", "sources"); 

// define which configurations we want to resolve (only have 1 in this case anyway) 
ResolveOptions resolveOptions = new ResolveOptions(); 

String[] confs = new String[] {"compile"}; 
resolveOptions.setConfs(confs); 

resolveOptions.setTransitive(true); // default anyway 
resolveOptions.setDownload(true); // default anyway 

ResolveReport report = ivy.resolve(md, resolveOptions); 

這會拉低默認罐子以及源目標。請注意,常春藤有一個問題,它不會過度拉動來源,儘管它會過度拉動'主要'的罐子。所以你只能得到這裏定義的直接依賴的源,而不是子依賴。

我試圖弄清楚的另一個弱點是假定目標依賴項具有「源」配置。我寧願告訴它得到任何類型的源/源/源的工件。還沒有想出那一個呢。