【问题标题】:Programmatically having ivy fetch sources以编程方式让常春藤获取源
【发布时间】:2014-12-31 19:54:26
【问题描述】:

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

给定一个依赖项(组 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"));

我也不太了解上面的 vs. RetrieveOptions vs. ResolveOptions。

我需要喝一杯。

【问题讨论】:

    标签: ivy


    【解决方案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 以及源目标。请注意,ivy 存在一个问题,即它不会传递地拉取资源,尽管它会传递地拉取“主”罐子。所以你只能得到这里定义的直接依赖的源,而不是子依赖。

    我试图弄清楚的另一个弱点是假设目标依赖项具有“源”配置。我宁愿告诉它获取源/源/src 类型的任何工件。还没想好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 2011-10-26
      • 2016-02-12
      • 2012-01-13
      • 2012-11-16
      • 2018-07-07
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多