Статьи

Эволюция Gradle Build из Ant Build: импорт файла сборки Ant

Изменение системы сборки в большом проекте может быть сложным и трудоемким. К счастью для тех, кто переносит   сборки Ant в сборки  Gradle  , Gradle предоставляет особенно удобные механизмы для облегчения этой  миграции . Поскольку Gradle построен на  Groovy,  а Groovy включает встроенную поддержку Ant через AntBuilder, сборки Gradle могут использовать AntBuilder  для вызова  задач Ant  и запуска  целей Ant . Тем не менее, Gradle предоставляет еще более простой механизм для ссылки на существующие цели Ant из сборки Gradle с поддержкой Gradle для  импорта сборки Ant,  и это тема этого поста.

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

Чтобы продемонстрировать, как легко  импортировать сборку Ant в сборке  Gradle, я сначала приведу листинг кода для упрощенной сборки Ant.

Файл сборки Ant: build.xml

<?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 который импортирует муравья build.xml

ant.importBuild 'build.xml'  

Однострочный файл сборки Gradle, показанный выше, импортирует файл сборки Ant, показанный ранее. Эффекты этого можно легко увидеть на следующих снимках экрана. Начальный снимок экрана показывает, что однострочный файл сборки Gradle делает проект «массивы» доступным для сборки Gradle, а также «другие задачи» со значениями «all» и «clean» с описаниями, связанными с этими целями Ant.

Можно использовать  gradle tasks --all для просмотра всех целей Ant, включая зависимые цели, такие как «compile», «jar» и «javadoc». Это продемонстрировано на следующем снимке экрана.

На следующем снимке экрана показано выполнение цели по умолчанию «все» в сборке Ant из сборки Gradle.

Как показали списки сборок и изображения, импорт существующей сборки Ant в сборку Gradle является простым процессом.