2014-11-04 78 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); 

这会拉低默认罐子以及源目标。请注意,常春藤有一个问题,它不会过度拉动来源,尽管它会过度拉动'主要'的罐子。所以你只能得到这里定义的直接依赖的源,而不是子依赖。

我试图弄清楚的另一个弱点是假定目标依赖项具有“源”配置。我宁愿告诉它得到任何类型的源/源/源的工件。还没有想出那一个呢。