Gradle 5.0 — что нового

    В процессе разработки CUBA мы применяли все три основных инструмента сборки — начали с Ant, потом перешли на Maven на короткое время, а сейчас используем Gradle и, похоже, что в ближайшее время останемся с ним.


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


    image


    Kotlin DSL


    Первое нововведение — Kotlin DSL. Теперь скрипты сборки можно писать на Kotlin, и это действительно ускоряет работу за счет автодополнения, в основном. Также работает подсветка синтаксических ошибок и прочие удобные вещи от IDEA. Конечно, IDEA и для Groovy старается все это сделать, но все-таки сильная типизация дает о себе знать. Заявляется, что Kotlin DSL стабилен, так что можно пользоваться безбоязненно.


    Нужно ли обязательно переходить на Kotlin? Нет, не нужно, Groovy DSL будет поддерживаться, от него не отказываются. Дальше уже нужно рассматривать каждый проект отдельно. Чтобы использовать Kotlin DSL — нужен Gradle 5 и JDK не ниже 8, для некоторых случаев это может быть не применимо. Кроме того, Groovy обеспечивает большую гибкость в написании скриптов за счет нестрогой типизации. В любом случае, решение остается за разработчиками, но, если все-таки решите переходить на Kotlin, то есть руководство по миграции.


    Интерактивный init


    Теперь, наконец, можно не писать кучу ключей при начальной сборке проекта, а выбрать тип проекта, язык скрипта сборки и даже фреймворк для тестирования в интерактивном режиме. Пишем gradle init — и наслаждаемся. Поддерживается генерация проектов на Kotlin!


    Инкрементальная компиляция и обработка аннотаций


    Продолжает развиваться механизм инкрементальной компиляции (включая обработку аннотаций библиотек типа Lombok) — не нужно перекомпилировать весь код. Можно создавать собственные задачи, которые поддерживают инкрементальную компиляцию.


    Ускорены процессы сборки за счет build cache, оптимизирована работа с памятью.


    FailFast тестирование — тесты будут запускаться, начиная с последнего ошибочного (если такой был, конечно).


    Управление зависимостями


    Поддержка BOM файлов — ура!


    Заявлена тонкая настройка правил замещения версий, можно писать программный код для обработки особо сложных случаев прямо в файле сборки. Там же — отключение транзитивных зависимостей.


    Можно принудительно ставить версию зависимости и запрещать перекрывать ее старшими версиями.


    И, в дополнение ко всему, для зависимостей поддерживается “заморозка” версий.


    Новый API для задач


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


    Worker API, который позволяет запускать задачи параллельно и с разными уровнями изоляции (даже на разных JVM можно). Помимо просто параллельного выполнения можно заставить ждать завершения выполнения других задач.


    Timeout API — для выставления максимального времени выполнения задачи.


    Configuration Avoidance API — позволяет не создавать и не конфигурировать задачи, которые все равно не будут выполняться.


    Подводя итог — хороший инструмент становится ещё лучше, за kotlin — отдельное спасибо, теперь на нем можно писать вообще все: front-end, back-end, мобильный клиент и скрипты сборки.

    • +26
    • 8,1k
    • 5
    Haulmont
    117,00
    Разработка корпоративного ПО
    Поделиться публикацией

    Похожие публикации

    Комментарии 5

      0

      Я скачал текущую версию Gradle (7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987), но gradle init ни разу не интерактивный:


      $ /c/Distr/SDK/gradle-5.0/bin/gradle --version
      
      ------------------------------------------------------------
      Gradle 5.0
      ------------------------------------------------------------
      
      Build time:   2018-11-26 11:48:43 UTC
      Revision:     7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987
      
      Kotlin DSL:   1.0.4
      Kotlin:       1.3.10
      Groovy:       2.5.4
      Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
      JVM:          1.8.0_161 (Oracle Corporation 25.161-b12)
      OS:           Windows 7 6.1 amd64
      
      $ /c/Distr/SDK/gradle-5.0/bin/gradle init --dsl kotlin
      > Task :wrapper
      > Task :init
      
      BUILD SUCCESSFUL in 2s
      2 actionable tasks: 2 executed

      Создался wrapper и два, фактически пустых, файла: build.gradle.kts, settings.gradle.kts.
      На сайте про интерактивность тоже ничего не пишут — у меня отработало прямо как в их же доке.


      Да, тип проекта можно указать через параметр --type, но это не интерактивность.

        0
        Скачал ровно же эту версию, аналогичная команда предложила интерактивно выбрать тип проекта.
          +1

          Вот мой код. Это нормально работает, если запускать init в пустой директории.


          PS C:\hello-world> gradle init
          
          Select type of project to generate:
            1: basic
            2: groovy-application
            3: groovy-library
            4: java-application
            5: java-library
            6: kotlin-application
            7: kotlin-library
            8: scala-library
          Enter selection (default: basic) [1..8] 6
          
          Select build script DSL:
            1: groovy
            2: kotlin
          Enter selection (default: kotlin) [1..2] 2
          
          Project name (default: hello-world):
          
          Source package (default: hello.world):
          
          BUILD SUCCESSFUL in 20s
          2 actionable tasks: 2 executed
          PS C:\hello-world>
            +3
            Возможно, что если запускать его через Cygwin или Mingw, как у вас, он посчитал, что не может открыть консоль для интерактивного режима (это делается через нативные win32-библиотеки).
              0

              Действительно, при запуске gradle.bat через виндовую консоль интерактивность появилась.
              Жаль что gradle (это, по идее, как раз линуксовый вариант) не работает в git-bash под виндой :(

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое