Переход от муравья к gradle - альтернативы macrodef? - PullRequest
0 голосов
/ 22 ноября 2018

Мы мигрируем из Муравья в Градл.Вначале Gradle выглядел многообещающе, когда я начал миграцию целей с Ant на Gradle, столкнувшись с похожими проблемами, ранее с Ant.

Поток Ant Build выглядит так -

У нас есть приложение Java- Ant используется для очистки, компиляции и сборки jar проекта.

Далее у нас есть несколько целей для копирования встроенного файла jar и некоторых других ресурсов на сервер Windows. Это всего лишь сервер Windows, а не связующее звено, как repo.

Эти цели копирования основаны на выпуске (внутренне используя macrodefs) - если альфа, он должен копировать в другую папку, а для стабильного выпуска - в другую папку.

Другой макроопределением было просто создать резервную копию существующих файлов на сервере, а затем скопировать туда новые файлы.


Миграция в Gradle - мне понравилось, как Gradle выполняет задачиочистить, собрать и собрать.Для этого я использую плагин Java.

В следующих задачах у меня возникают проблемы с копированием файлов на сервер Windows и сохранением старых файлов перед копированием новых файлов.

В Gradle я создал несколько пользовательскихтакие задачи, как copyJarAlpha, copyJarStable, backupJarAlpha, backupJarStable и т. д.

Внутренне они делают то же самое, просто копируя файлы из источника в место назначения и некоторые операторы печати.Но это выглядит повторяющимся.Я искал такие способы, как macrodef в муравье.

task deployAlpha {

doFirst {
    isJenkinsAvailable(deployDirAlpha)
}

doFirst {
    if(isDeployLibsTaskRequired(outputDir,deployDirAlpha)) {
        tasks.findByName('deployLibsAlpha').execute()
    }
}

doLast {
    println "Deploying corejar jar to : ${deployDirAlpha}"
    copy {
        from "${outputDir}/${corejar}"
        into "${deployDirAlpha}"
    }
    println "Deploying evan-core jar to : ${deployDirAlpha}/lib"
    copy {
        from "${externalLibsDir}/core2.jar"
        into "${deployDirAlpha}/lib"
    }
    println "Deploying test resource files to : ${deployDirAlpha}"
    copy {
        from "./test-resources/logback-test.xml", "./test-resources/JUnit-TestSuiteResults.xsl"
        into "${deployDirAlpha}"
    }
}

}

У меня есть похожие фрагменты в нескольких местах.Это не выглядит красиво.

Есть ли способ, которым мы можем повторно использовать методы / функции в Gradle?или я допускаю неправильные вещи здесь .. или я пытаюсь использовать gradle для вещей, для которых он не предназначен?Как лучше всего выполнить эти задачи по копированию и резервному копированию файлов, если не использовать пользовательские задачи в Gradle?

1 Ответ

0 голосов
/ 22 ноября 2018

Вот несколько вариантов.

Создание плагина (см. Написание пользовательских плагинов )

public class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.with {
            apply plugin: 'x' 
            dependencies {...}
            task deployAlpha{...}
        }
     }
} 

Использование

apply plugin: MyPlugin 

Или плагин сценария

apply from: 'path/to/script.gradle'

Вы также можете присоединять функции к объектам домена через ext объекта домена (см. ExtraPropertiesExtension )

allprojects {
    ext.doProjectStuff = { String arg -> return "project${arg}"}
    dependencies.ext.doSependenciesStuff = { String arg -> return "dependencies${arg}"}
}

Использование

def foo = doProjectStuff('x')
dependencies {
    def bar = doDependenciesStuff('y')
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...