我们有一个自定义构建工具,它依赖于常春藤功能来解决依赖关系。依赖项的配置不是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。
我需要喝一杯。
答案 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的任何工件。哈文还没想出那个。