Изменение системы сборки в большом проекте может быть сложным и трудоемким. К счастью для тех, кто переносит сборки Ant в сборки Gradle , Gradle предоставляет особенно удобные механизмы для облегчения этой миграции . Поскольку Gradle построен на Groovy, а Groovy включает встроенную поддержку Ant через AntBuilder, сборки Gradle могут использовать AntBuilder для вызова задач Ant и запуска целей Ant . Тем не менее, Gradle предоставляет еще более простой механизм для ссылки на существующие цели Ant из сборки Gradle с поддержкой Gradle для импорта сборки Ant через DefaultAntBuilder, и это тема этого поста.
Возможность вызывать существующие цели Ant из новой сборки Gradle является преимуществом, поскольку позволяет выполнять миграцию с течением времени. Можно начать использовать Gradle практически сразу со всей реальной работой, делегированной существующей сборке Ant. Затем, если позволяют время и приоритеты, различные задачи Ant можно заменить задачами Gradle.
Чтобы продемонстрировать, как легко импортировать сборку Ant в сборке Gradle, я сначала приведу листинг кода для упрощенной сборки Ant.
Файл сборки Ant: build.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<? xml version = "1.0" encoding = "UTF-8" ?> < project name = "JavaArrays" default = "all" basedir = "." > < description >Java Array Utility Functions</ description > < property name = "javac.debug" value = "true" /> < property name = "src.dir" value = "src" /> < property name = "dist.dir" value = "dist" /> < property name = "classes.dir" value = "classes" /> < property name = "javadoc.dir" value = "${dist.dir}/javadoc" /> < property name = "jar.name" value = "javaArrays.jar" /> < property name = "jar.filesonly" value = "true" /> < path id = "classpath" > </ path > < target name = "-init" > < mkdir dir = "${classes.dir}" /> < mkdir dir = "${dist.dir}" /> </ target > < target name = "compile" description = "Compile the Java code." depends = "-init" > < javac srcdir = "${src.dir}" destdir = "${classes.dir}" classpathref = "classpath" debug = "${javac.debug}" includeantruntime = "false" /> </ target > < target name = "jar" description = "Package compiled classes into JAR file" depends = "compile" > < jar destfile = "${dist.dir}/${jar.name}" basedir = "${classes.dir}" filesonly = "${jar.filesonly}" > </ jar > </ target > < target name = "all" description = "Compile Java source, assemble JAR, and generate documentation" depends = "jar, javadoc" /> < target name = "javadoc" description = "Generate Javadoc-based documentation" > < mkdir dir = "${javadoc.dir}" /> < javadoc doctitle = "Examples of Java Array Utility Functions" destdir = "${javadoc.dir}" sourcepath = "${src.dir}" classpathref = "classpath" private = "true" author = "Dustin" /> </ target > < target name = "clean" description = "Remove generated artifacts." > < delete dir = "${classes.dir}" /> < delete dir = "${dist.dir}" /> </ target > </ project > |
В приведенном выше файле сборки Ant есть довольно типичные цели с такими именами, как «compile», «jar», «javadoc» и «clean». Все эти функции можно импортировать в файл сборки Gradle. Следующий листинг кода — это полный файл сборки Gradle, который это делает.
Gradle build.gradle
который импортирует Ant build.xml
1
|
ant.importBuild 'build.xml' |
Однострочный файл сборки Gradle, показанный выше, импортирует файл сборки Ant, показанный ранее. Эффекты этого можно легко увидеть на следующих снимках экрана. Начальный снимок экрана показывает, что однострочный файл сборки Gradle делает проект «массивы» доступным для сборки Gradle, а также «другие задачи» со значениями «all» и «clean» с описаниями, связанными с этими целями Ant.
Можно использовать gradle tasks --all
— все, чтобы увидеть все цели Ant, включая зависимые цели, такие как «compile», «jar» и «javadoc». Это продемонстрировано на следующем снимке экрана.
На следующем снимке экрана показано выполнение цели по умолчанию «все» в сборке Ant из сборки Gradle.
Как показали списки сборок и изображения, импорт существующей сборки Ant в сборку Gradle является простым процессом.