从蚂蚁+常春藤迁移到摇篮(Migrating from ant + ivy to gradle)

2019-10-18 07:23发布

我了解gradle这个多好东西,所以我得到深刻的印象。 很多人都热心是多么容易的gradle与发展。 他们都强调gradle产出的多项目capabilies。

我已经有一些子项目的主项目。 外部依赖关系中的所有项目自身的ivy.xml定义。 和模块的相互依存关系在两个Eclipse的.classpath文件和蚂蚁的build.xml平行定义。 这样我可以建立IDE,可以创建一个蚂蚁运行。 有一个简单的方法来迁移从日食/蚂蚁和常春藤到摇篮(或gradle这个+常春藤)相同的构建结构?

构建过程很简单:

  1. 解决从的ivy.xml子项目的依赖
  2. 构建子项目
  3. (重复1和2对所有的子项目)
  4. 解决主项目的依赖关系(无论是从常春藤和eclipse /蚂蚁配置)
  5. 建设主体工程
  6. 一切包成一个jar文件

不是火箭科学...但它花了很多天来实现它的蚂蚁。 那真的是一个简单的迁移到摇篮? 如果有,是什么的起点?

我看到有一个Eclipse插件,但我只看到生成的.classpath,不解析/读取它的可能性。 我看到一个常春藤XML插件太多。 目前尚不清楚,我如何处理相关的项目/模块?

任何帮助是值得欢迎的。

问候:本斯

Answer 1:

如果你没有很多定制的Ant任务,只需要转换你的常春藤的依赖关系,这会从你的ivy.xml创建gradle这个依赖。 粘贴到一个空的build.gradle你一起和的ivy.xml运行gradle ivyToGradle 。 然后复制到您的build.gradle文件。 需要gradle这个2.12+由于使用compileOnly配置。

这不会处理所有可能的ivy.xml设置,您可能需要调整您的特定用途的ivy.xml的。 它可以处理基本知识,如运行CONFIGS,测试CONFIGS,编译只有CONFIGS,全球排除,传递真​​/假,和版本强迫。

task ivyToGradle {
    description "Converts dependencies in ivy.xml to gradle dependencies."
    doLast {
        def ivyModule = new XmlParser().parse(new File("$projectDir/ivy.xml"))
        if (!ivyModule.dependencies.exclude.isEmpty() || !ivyModule.dependencies.override.isEmpty()) {
            println "configurations.runtime {"
            ivyModule.dependencies.exclude.each {
                def excludeStrs = []
                if (it.@org != null) {
                    excludeStrs.add("group: '${it.@org}'")
                }
                if (it.@module != null) {
                   excludeStrs.add("module: '${it.@module}'")
                }
                if (!excludeStrs.isEmpty()) {
                    def excl = excludeStrs.join(", ")
                    println "    exclude ${excl}"
                }
            }
            def overrides = ivyModule.dependencies.override.findResults {
                if ("exact" != it.@matcher) {
                    return null
                }
                if (!it.@org || !it.@module || !it.@rev) {
                    return null
                }
                return "        '${it.@org}:${it.@module}:${it.@rev}'"
            }
            if (overrides) {
                println "    resolutionStrategy.force("
                println overrides.join(",\n")
                println "    )"
            }
            println "}"
            println ""
        }
        println("dependencies {")
        ivyModule.dependencies.dependency.each {
            def transitive = ("false" != it.@transitive)
            def force = ("true" == it.@force)
            def scope = "compileOnly" // Requires gradle 2.12 or later
            if (it.@conf?.contains("test")) {
                scope = "testCompile"
            } else if (it.@conf?.contains("runtime")) {
                scope = "compile"
            }
            def hasBlock = !it.exclude.isEmpty() || !transitive || force
            if (hasBlock) {
                println "    $scope('${it.@org}:${it.@name}:${it.@rev}') {"
                it.exclude.each {
                    def excludeStrs = []
                    if (it.@org != null) {
                        excludeStrs.add("group: '${it.@org}'")
                    }
                    if (it.@module != null) {
                       excludeStrs.add("module: '${it.@module}'")
                    }
                    if (!excludeStrs.isEmpty()) {
                        def excl = excludeStrs.join(", ")
                        println "        exclude ${excl}"
                    }
                }
                if (!transitive) {
                    println "        transitive = false"
                }
                if (force) {
                    println "        force = true"
                }
                println "    }"
            } else {
                println "    $scope '${it.@org}:${it.@name}:${it.@rev}'"
            }
        }
        println("}")
        println ""
    }
}


Answer 2:

你必须手动迁移构建,翻译build.xml的和ivy.xml的到摇篮的构建语言。 (还有一个Ant导入功能,但它不是在实践中特别有用。)如有需要,你可以轻松地重用Ant任务。 您可以导入一个摇篮构建到Eclipse中使用Eclipse插件摇篮,或生成使用摇篮Eclipse插件的Eclipse文件。 良好的开端是研究的前几章摇篮用户指南 ,然后在Ant集成和多项目建立的章节。 完整的摇篮分布附带了很多示例生成。



文章来源: Migrating from ant + ivy to gradle