以编程方式拥有常春藤获取源

时间:2014-11-04 19:27:50

标签: ivy

我们有一个自定义构建工具,它依赖于常春藤功能来解决依赖关系。依赖项的配置不是ivy.xml文件,而是一个自定义配置,允许...嗯,无关紧要。关键是我们以编程方式使用常春藤。

给定依赖项(组ID,工件ID,版本),我们创建ModuleRevisionId:

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

后面是ModuleDescriptor。这是,我猜,我不能说服我告诉ivy我想要目标库jar文件以及源代码。在创建ModuleDescriptor时,我只是不确定DependencyConfiguration与'配置'是什么。

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。

我需要喝一杯。

1 个答案:

答案 0 :(得分:1)

好的,所以花了一段时间,但我终于绕过了其中一些。

// 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);

这会拉下默认jar和源目标。请注意,常春藤有一个问题,它不会传递拉动来源,尽管它会过渡性地拉动主要的'罐子。所以你只能获得这里定义的直接依赖的源,而不是子依赖。

我试图弄清楚的另一个弱点是,这假设目标依赖关系有一个来源'组态。我宁愿告诉它获取类型sources / source / src的任何工件。哈文还没想出那个。