πŸ“˜
Dev & Ops
Programming
Programming
  • Programming Book
  • Technologies
    • API
      • Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ API
        • Facebook API
      • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ API
        • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для проСктирования
          • ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ
          • Postman
          • Swagger
        • Webhooks
        • GraphQL
          • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
          • Introspection
        • RPC
          • ОписаниС
          • gRPC
          • XML-RPC
          • SOAP
            • About
            • wsdl
          • JSON RPC
        • REST API
        • SAML
      • Program's API
        • ΠžΠ±Ρ‰ΠΈΠ΅ понятия
        • DOM API & элСмСнты Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°
        • Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ API
          • Google API
          • Telegram Bot API
      • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с сСрвСра / AJAX
      • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
        • ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹
        • ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅
          • Web Storage API
          • IndexedDB
          • Service Worker API
          • Cache API
    • WEB
      • Modern Web Application Architecture
      • PWA
      • Π‘Ρ‚Π΅ΠΊΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ
        • JAMstack
        • LAMP
        • MEAN
        • MERN
      • The World Wide Web Consortium (W3C)
    • АрхитСктура сСрвисов
      • No-code / Low-code
        • Databases
        • ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для запуска ΠΈ исполнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… процСссов ΠΈ вычислСний
        • Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сайтов
      • АрхитСктурныС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹
        • Papers
        • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ модСлирования Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹
        • АрхитСктура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
          • ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹
          • Feature-Sliced Design
          • MVC
          • DDD | Domain-Driven Design
          • Clean Architecture
          • Hexagonal
        • АрхитСктура ΠΊΠΎΠ΄Π°
          • Papers
          • Singleton
          • Retry
          • Circuit Breaker
          • ΠžΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ
            • Intro
            • Observer
            • PubSub
          • ООП
        • АрхитСктура систСм
          • Monolith
          • API Gateway
          • CQRS
          • Microservices
          • Service Mesh
            • Для Ρ‡Π΅Π³ΠΎ
            • Kuma
            • Istio
            • Hashicorp Consul
      • Telemetry
        • OpenTelemetry Concepts
        • Metrics
        • Tracing
        • Logs collect
      • Testing
      • ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΎΠΊ
      • Cases
      • Π‘Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ сообщСний
        • Why?
        • RabbitMQ
        • RedisMQ
        • AWS SQS
        • Apache Kafka
        • ZeroMQ
        • Apache ActiveMQ
        • IronMQ
      • Автоматизация сборок
        • Makefile
      • Subscriptions
      • Zero Trust
    • Визуализация ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
      • Design/БовмСстная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° интСрфСйсов
      • Π Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
      • Π‘Ρ…Π΅ΠΌΡ‹, Π³Ρ€Π°Ρ„Ρ‹, рисунки..
        • Π Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ
        • РисуСм структуру Π±Π°Π·Ρ‹
        • Miro App
        • РисованиС дСтских Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ
        • draw.io
        • Xmind
      • ΠšΡƒΠ΄Π° Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ
      • yEd
      • LaTeX + PGF/TikZ
    • Version Control Systems
      • Git
      • Github
    • Programs
      • Adobe Alternatives
      • Atlassian
        • Jira
        • Confluence
      • Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
        • LevelDB
      • Google Products for Developers
      • Open source
      • Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ
      • vscode
      • Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
      • Regular expressions
      • Browsers
    • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
      • ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΎΠΉ поиск
      • ΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊ
      • РСгулярныС выраТСния
      • РСшСниС практичСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ML
      • Chrome Cast
    • AI
      • Учимся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AI
      • Core Tech
      • ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ использованиС
        • Assistants
        • Code assistants
        • Security
        • Web & Design
    • Dev portals
    • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€
  • Management
    • (draft) Product Management
      • ΠŸΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ΄Π΅ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса
      • ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π³ΠΈΠΏΠΎΡ‚Π΅Π·
    • Goals management
      • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ тСзисы
      • OKR
      • KPI
      • OKR vs KPI
  • Programming Languages
    • Learn materials
    • Code Quality
    • Security Coding Styles
    • Testing
      • Integration testing
    • Other non programming languages
      • YAML
      • Proto
      • SQL
        • Create table
        • WITH operator
        • Time sleep
    • Bash
      • ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
        • Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ
        • Untitled
        • trim
      • ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹
    • PowerShell
      • IDE
      • Запуск скриптов
      • Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ запуск скриптов (with privesc)
      • ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ
      • ΠžΡΠ½ΠΎΠ²Ρ‹/ОписаниС ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…
      • Papers & Books
      • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹
        • Get-Help
        • Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»
        • Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ скриптов
        • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Credential
        • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ
        • Simple HTTP Server
    • Swift
    • ActionScript
    • Backend
      • Build & Distribution
        • cookiecutter
        • meson
        • Fastlane
        • Maven
        • Gradle
        • Apache Ant
      • JVM
        • Java Env Manager
        • Java
          • Build and Run Simple Script
          • jshell & jrunscript
          • Basic Serialization and Deserialization Java Object
          • Libraries
        • Scala
        • Kotlin
          • Intro
          • Basics
          • Async Programming
          • Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
          • Frameworks
            • Kotlin stdlib
            • HTTP
            • Documentation
        • Frameworks
          • Jersey Rest API
          • Spring Framework
            • About
            • Spring Boot AutoConfiguration
            • Spring IoC
            • Spring MVC
            • Spring Boot
            • Other Spring Annotations
          • Struts 2
        • Security
      • JS/TS
        • Lerna
        • Gulp
        • Frameworks
          • Templating libraries
          • Nest.js
          • Fastify
          • Express.js
          • Koa.js
      • Go
        • Get Started
          • Basic
          • Golang докумСнтация
          • Golang VSCode IDE
          • GOPATH and GOROOT
          • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ Π½Π° Go
        • ΠžΠ±Ρ‰Π΅Π΅
          • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
          • Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки
          • Випизация
            • ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
            • БоставныС Ρ‚ΠΈΠΏΡ‹
            • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹
            • Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ константы
            • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ
            • Π‘Ρ€Π΅Π·Ρ‹
            • Π Π°Π±ΠΎΡ‚Π° с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ
          • ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ
            • ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ
            • ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈ срСзы
            • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ
          • ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
            • ВСтвлСния
              • if
              • select
              • switch
            • Π¦ΠΈΠΊΠ»Ρ‹
            • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
          • ООП
            • ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ понятия
            • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹
            • ΠΡŽΠ°Π½ΡΡ‹ ΠΈ ограничСния
          • Generics in Go
          • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
            • go-ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
            • ΠšΠ°Π½Π°Π»Ρ‹ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
            • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ
        • Packages
          • Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
          • Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
          • Π‘Π°Π·ΠΎΠ²Ρ‹Π΅
            • Бписком
            • context
          • Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅
            • ΠžΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹Π΅
            • Абстракции
            • ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹
              • go-micro
              • gRPC Ecosystem
              • Go kit
                • About
                • ΠŸΡ€ΠΈΠΌΠ΅Ρ€
                • Middlewares
                • ΠžΠ±Ρ‰Π΅Π½ΠΈΠ΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ микросСрвисами
            • GUI Decktop
            • web
            • Protocols
            • Network
            • FileSystem
            • Files & Databases
            • Testing, Profiling
            • Others
        • Debugging
        • Testing
        • Diagnostics
        • Godoc
        • Books
        • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹
          • Hello world
          • Π£Π·Π½Π°Ρ‚ΡŒ ОБ
          • Π’ΠΈΠΏΡ‹
          • Π€Π°ΠΉΠ»Ρ‹
          • HTTP-сСрвСр
          • Test HTTP Request
          • RabbitMQ with Go
        • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹
          • _cgo_export.c:3:10: fatal error: 'stdlib.h' file not found
        • Tools Powered on Go
        • Go Security
      • Ruby
        • Use Ruby Env and Deps
        • VSCode Ruby extensions
        • Ruby Language Guide
          • Comments
          • Variables
          • Strings
          • Ranges
          • Arrays
          • Methods
          • Flow Control
          • Classes
          • Dependencies
        • Cases
          • WebSocket Server
        • Frameworks
          • Web: Sinatra
          • Web: Padrino
          • Web: Ruby on Rails
            • Getting Started
            • Routes
            • Controllers
            • Modules
            • Rails Security
              • Common Security Issues
                • Common
                • Deserialisation
                • SQLi
              • Ruby CVEs
              • Security Tools
              • Papers
          • Middleware: Rack
          • Test: RSpec
      • Python
        • Basic
          • Install
          • Enum
          • Collections
          • Operators
          • Reflection
          • Tips
        • Advanced
          • Venv
          • Include Other Languages Libs
          • ВрСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
          • Π Π°Π±ΠΎΡ‚Π° с контСкстом
          • Π Π°Π±ΠΎΡ‚Π° с тСкстом, числами ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
          • Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ IO
          • Запуск Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
          • Π Π°Π±ΠΎΡ‚Π° с функциями
          • Π Π°Π±ΠΎΡ‚Π° с классами
          • Π Π°Π±ΠΎΡ‚Π° с ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ
          • Π Π°Π±ΠΎΡ‚Π° с Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ
          • Π Π°Π±ΠΎΡ‚Π° с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ
          • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ CLI
          • tqdm
          • pydantic
        • Packaging
          • Intro
          • Install packages / Build Frontends
            • pip
            • pipx
            • hatch
            • poetry
          • ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°
            • src-layout vs flat-layout
            • namespaces
            • Plugins
          • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ
            • Papers
            • pyproject.toml
            • setup.py
            • setup.cfg
        • Packages
          • Public Lists of Python Packages
          • Linters
          • True Python
          • Network
          • Web
            • Simple HTTP Server
            • ASGI Python Web Servers
            • Http Client
              • aiohttp
              • requests
              • Packages
            • selenium
            • zeep [SOAP]
          • Web Frameworks
            • Bootle
            • FastAPI
            • Flask
            • Django
              • Intro
              • Django Admin
              • Django Signals
              • Security
            • Tornado
          • Databases
            • boto3
            • Mongo
            • Postgres
            • SQLAlchemy
          • Асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСний / Ρ€Π°Π±ΠΎΡ‚Π° с очСрСдями
            • Celery
            • Others
          • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
            • Π Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ
            • plist
            • HAR
            • Лингвистика
            • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
            • Parsing HTML
            • Parsing JS
            • Beatifiers
            • XML -> Dictionary
            • Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ тСкста ΠΈΠ· pdf
            • Π‘Π°Π½ΠΈΡ‚Π°ΠΉΠ·Π΅Ρ€Ρ‹
            • Document converter
            • ГСнСрация PDF Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
            • Parse and generate CSS
            • PDF Parser
          • Qt/QML
          • Python script -> binary file
          • Π Π°Π·Π½ΠΎΠ΅
          • Math & Crypto
          • Π Π°Π±ΠΎΡ‚Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвисами
          • pwn & re
        • Patterns
          • Singleton
          • Factory
        • Testing
          • Intro
          • Pytest CLI
          • Markers
          • Fixtures
          • Mocking
          • Plugins
          • Configuration
          • Unit tests
        • Errors
        • Papers & Books
        • Python Security
      • .Net
        • dotnet
        • NuGet
        • Π˜Π½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡ .Net Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ
      • ASP.NET
        • ПоднимаСм тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
        • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΠ°ΠΏΠΎΠΊ ASP.Net ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
          • ASP.NET Core
          • ASP.NET MVC
          • Classic ASP.NET WebApp
        • ASPX
          • examples
            • Hello world
        • Security
      • Perl
        • cpan
      • PHP
        • Getting Started
        • Basic
        • Magic Methods
        • Examples
          • Phar
          • Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ
          • Usefull small examples
          • ΠŸΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΈΠ½Ρ„Ρ€Ρƒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
          • Simple page with GET param
        • Packages
        • Frameworks
          • Yii
          • Laravel
            • Intro
            • Getting Started
            • Docker
            • Pentest
          • Zend
          • Symfony
          • CodeIgniter
          • Moodle
        • Libraries
        • Security
      • C/C++
        • Security
        • IDE
        • Build
          • Compilers
            • GCC
            • MinGW
            • Clang
            • MSVC
          • cmake
        • Cases
          • Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ .Lib/.h ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VS/C/C++
          • Disable stdafx and other features in VS
          • Если Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Visual Studio 2015
    • Frontend
      • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
      • HTML
        • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
        • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹
          • iframe
          • Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° со ссылкой
          • Π‘Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°
          • ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ страницу ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ
          • Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ссылки
          • GET-запрос
          • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСкста Π² Π±Π»ΠΎΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ локально Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Π°)
          • Random Color для всСх элСмСнтов
        • Papers & Notes
      • CSS
        • Basic
        • Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€Ρ‹
          • О сСлСкторах
          • НаслСдованиС стилСй
          • ОбъявлСниС ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹
          • ΠŸΡΠ΅Π²Π΄ΠΎΠΊΠ»Π°ΡΡΡ‹
        • CSS Бвойства
          • Π¦Π²Π΅Ρ‚
          • Π¨Ρ€ΠΈΡ„Ρ‚Ρ‹ ΠΈ Ρ‚ΠΈΠΏΠΎΠ³Ρ€Π°Ρ„ΠΈΠΊΠ°
          • Бтилизация Π°Π±Π·Π°Ρ†Π΅Π²
          • Блочная модСль ΠΈ отступы
          • Π‘Ρ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ Π±Π»ΠΎΡ‡Π½ΠΎ-строчныС элСмСнты
          • Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ элСмСнтов
          • Π’Π΅Π½ΠΈ
          • ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° элСмСнтов
          • Rotation
        • CSS Processors
        • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
        • Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ стили
        • Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ вСрстки
          • Блочная ΠΈ табличная вСрстки
          • Блочная вСрстка
          • Flexbox вСрстка
          • Grid Layout вСрстка
        • Frameworks
          • Gravity UI
          • Material Design
          • Materialize
          • Bootstrap
        • Π‘ΠΎΠ²Π΅Ρ‚Ρ‹
        • Papers
      • JS/TS
        • JavaScript
          • About
          • Basic JS
          • Async JS
          • RxJs
          • Guide
            • Proxy
            • Reflect
          • Cases
            • Π‘ΠΎΡ€ΡŒΠ±Π° с CORS ΠΈ Local File Read Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅
            • ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ Π² JS
            • ВСстированиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ (slow js http response)
            • JSessionID
            • RCE
            • Π—Π°ΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса
            • ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
            • postMessage
            • Π‘Π°ΠΌΡ‹ΠΉ простой Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ Π½Π° страницС
            • HTTP запросы ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ· JS
            • ИспользованиС сторонних скриптов
            • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² списком
        • TypeScript
          • Init
          • Π’ΠΈΠΏΡ‹
            • Abstract classes, interfaces and types
            • Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ созданиС своих Ρ‚ΠΈΠΏΠΎΠ²
            • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
            • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ слоТных Ρ‚ΠΈΠΏΠΎΠ²: Interfaces
            • Enums
            • Null Safe
            • Π Π°Π±ΠΎΡ‚Π° со строками ΠΈ массивами
          • Π’Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹
          • Π€ΡƒΠΊΠ½Ρ†ΠΈΠΈ ΠΈ классы
            • Functions
            • Classes
          • Guards (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ²)
          • Generic-Ρ‚ΠΈΠΏΡ‹
          • Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹
          • Namespaces
          • ΠœΠΎΠ΄ΡƒΠ»ΠΈ
          • Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
          • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты
          • Π Π°Π·Π½Ρ‹Π΅ соглашСния
        • Libraries
        • Frameworks
          • Web
            • React
              • Getting Started
              • Deploy
              • Packages
              • Security
              • Frameworks
                • Next.js
                • Remix
                • Gatsby
            • Vue.js
              • Nuxt.js
            • Angular
              • About
              • ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°
                • Get Started
                • Angular CLI
                • Basic
                • Material Design Support
                • Components
                  • Introduction
                  • Lifecycle
                  • Create components
                  • Component Interaction
                  • Content Projection
                  • Dynamic components
                  • Angular Elements
                • Templates
                  • Text interpolation
                  • Template statements
                  • Pipes
                • Directives
                • Routing
                • Π Π°Π±ΠΎΡ‚Π° с сСрвисами
              • Packages
                • Бписком
                • NgRx
                  • About
              • Cases
                • RxJs WebSockets
                • Errors
                • Code Styles And Best Practices
                • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ сайтов Π½Π° Angular
            • SvelteJS
            • Others
              • jQuery
              • Meteor
              • AngularJS
              • Ext JS / Sencha
          • Mobile & Desktop
            • ReactNative
              • npx/react-native cli
            • Electron.js
          • State Managers
          • Rendering
          • i18n: Format.JS
        • Packet Managers
        • JS Runtime
          • Node.js
          • Deno
        • Other projects
      • CMS
      • ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ WebStorm IDE
      • Dart/Flutter
        • About
        • Install
        • Packages & Plugins
        • Build & Run
        • Patterns
        • Dart
          • Intro
          • Variables
          • Functions
          • Operators
          • Control flow statements
          • Exceptions
          • Classes
          • Generics
          • Libraries and visibility
          • Asynchrony support
          • Generators
          • Isolates
          • Typedef
          • Packages
        • Flutter
          • Flutter CLI
          • pubspec.yaml
          • Widgets
          • Codelabs
          • Packages
          • Distribution
        • Dart & Flutter Playground
        • ΠšΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Flutter
        • Papers & Tutorials
      • Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ JS/TS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
        • TODO: Webpack
        • TODO: Parcel
        • TODO: Rollup
      • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹
        • Babel
      • Testing
      • Learning
  • Others
    • Licenses
    • Ѐотостоки
    • Как ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ свой Github
    • ΠŸΡ€Π°Π²ΠΈΠ»Π° вСрсионирования
    • ΠŸΡ€Π°Π²ΠΈΠ»Π° оформлСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²
    • Π‘Ρ‚ΠΈΠ»ΠΈ имСнования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ классов
    • Language for IoT dev β€” TOIT
    • Online IDE
    • ДокумСнтация ΠΏΠΎ API ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ языкам Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС
    • Π‘ΠΊΠΈΠ»Π»Ρ‹ ΠΊΠ°ΠΊ спСциалиста
      • RoadMap для Ρ€Π°Π·Π½Ρ‹Ρ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ
      • Π—Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
      • Алгоритмы
      • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ
      • Web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ
      • DevOps
      • БумаТная Π˜Π‘
      • Компании Π˜Π‘
Powered by GitBook
On this page
  • Intro
  • Install
  • Update gradle
  • Basics
  • Tasks ΠΈ Projects
  • Π€Π°Π·Ρ‹ сборки Gradle
  • gradle.properties
  • Extra properties
  • Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ
  • Dependencies
  • Modules
  • Configurations
  • Resolution strategy
  • Transitive dependencies
  • Dependency constraints
  • Excluding transitive dependencies
  • Because
  • Plugins
  • SourceSets
  • Flavors & BuildTypes
  • Kotlin & Groovy DSL
  • buildSrc & Version Catalog
  1. Programming Languages
  2. Backend
  3. Build & Distribution

Gradle

PreviousMavenNextApache Ant

Last updated 2 years ago

Intro

БистСма Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сборки. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ β€” это dsl Π½Π° Groovy ΠΈΠ»ΠΈ Kotlin. НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Android ΠΈ jvm, Π½ΠΎ ΠΈ для native (C++, swift) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

Youtube запись ΠΎΡ‚ Redmadrobot:

ДокумСнтация ΠΎΡ‚ Kotlin ΠΏΠΎ использованию Gradle для сборки kotlin-прилоТСния:

Мой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я собирал kotlin multiplatform Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Π²Π΅Π±-сСрвСра ΠΈ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄ прилоТСния с использованиСм ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° buildSrc ΠΈ синтаксиса Kotlin DSL для gradle:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ multiplatform ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²:

Install

releases:

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π±ΠΈΠ½Π°Ρ€ΠΈ, ΠΊΠ»Π°Π΄Π΅ΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ, ΠΈ прописываСм ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ bin Π² PATH.

gradle -v

Update gradle

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ gradle, Π½Π°Π΄ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ для зависимости com.android.tools.build:gradle.

build.gradle:

buildscript {
    ext {
        gradle_version = "7.1.2"
    }

    repositories {
        google()
    }
    
    dependencies {
        classpath "com.android.tools.build:gradle:${gradle_version}"
    }
}

Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ gradle:

  • Android Studio: File > Project Structure > ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Gradle ΠΈΠ· Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка. НуТная вСрсия Gradle сразу подтянСтся

  • Terminal:

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΏΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии
$ gradle help --scan
$ gradle --version

ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΎ 7.0:
$ gradle wrapper --gradle-version 7.0

Basics

  • Бостоит ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠ½ΠΈ ΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ модулями, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ)

  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ структуры

root_project/
   sub-project-1/
      build.gradle
   sub-project-2/
      one-more-sub-project/
         build.gradle
      build.gradle
   sub-project-3/
      build.gradle
   build.gradle
   settings.gradle

settings.gradle β€” здСсь описаны всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹:

rootProject.name = "Root Project"
include("sub-project-1")
include("sub-project-2")
include("sub-project-3")
include("sub-project-2:one-more-sub-project")

Tasks ΠΈ Projects

  • Π­Ρ‚ΠΎ основныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Gradle

  • Васк β€” основная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° выполнСния Π² Gradle.

  • Васки ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ таска (Π½Π° Kotlin DSL):

tasks.register("hello") {
    doFirst {
        // Some actions β€” Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€ΠΈ запускС таска
        println("Hello world!")
    }
    println("Action in Configuration State") // Π­Ρ‚ΠΎ дСйствиС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° стадии ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
    doLast {
        // Some actions β€” Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€ΠΈ запускС таска
        println("Hello world!")
    }
}

Task configuration

  • doFirst() ΠΈ doLast() β€” дСйствия, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ выполСнСния таска

  • description β€” описаниС таска

  • group β€” имя Π³Ρ€ΡƒΠΏΠΏΡ‹ тасков

  • extra properties

Task actions

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @TaskAction, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ запускС таска

  • Π£ таска ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько action'ΠΎΠ²

  • ВсС action'Ρ‹ хранятся Π² спискС ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ порядку

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ doFirst ΠΈ doLast Π½Π° самом Π΄Π΅Π»Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ action'Ρ‹ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ† списка

Incremental Tasks

НСкоторыС таски достаточно тяТСлыС, ΠΈ Π½Π΅Ρ‚ смысла ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ измСнСния Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… тасках. Π•ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ таски, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния тасков

  • NO-SOURCE β€” таск Π½Π΅ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ нашлось Π΄Π°Π½Π½Ρ‹Ρ… для Π½Π΅Π³ΠΎ

  • SKIPPED β€” таск Π½Π΅ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½

    • Π±Ρ‹Π» явно Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½

      • Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -x)

      • Ρ‡Π΅Ρ€Π΅Π· свойство enabled=false

      • Ρ‡Π΅Ρ€Π΅Π· список excludedTaskNames

    • ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» StopExecutionException

    • Ρƒ таска Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ onlyIf {}, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½ΡƒΠ» false

  • FROM-CACHE

    • ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния task'Π° Π±Ρ‹Π» взят ΠΈΠ· кэша

    • Π§Ρ‚ΠΎΠ±Ρ‹ gradle ΠΌΠΎΠ³ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ task, Π½Π°Π΄ΠΎ Π΅Π³ΠΎ явно ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @CacheableTask

    • Gradle Π½Π° основС ΠΈΠΌΠ΅Π½ΠΈ класса, Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сам вычисляСт ΠΊΠ»ΡŽΡ‡

    • Кэш ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколькими машинами

  • UP-TO-DATE

    • старый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π² gradle, ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ Π΄ΠΎ кэша

    • Task ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ измСнились

    • Task явно ΡƒΠΊΠ°Π·Π°Π» gradle, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ измСнились (Ρ‡Π΅Ρ€Π΅Π· лямбду, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π² outputs.upToDateWhen{})

    • Π£ task'Π° Π½Π΅Ρ‚ action'ΠΎΠ² ΠΈ ΠΎΠ½ зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… task'ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ UP-TO-DATE, SKIPPED ΠΈΠ»ΠΈ FROM_CACHE

    • Π£ task'Π° Π½Π΅Ρ‚ Π½ΠΈ action'ΠΎΠ², Π½ΠΈ зависимостСй

  • (no label) or EXECUTED β€” Task ΠΈ Π΅Π³ΠΎ зависимости Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹

Как ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ зависимостями ΠΌΠ΅ΠΆΠ΄Ρƒ тасками

1

dependsOn() β€” Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Task Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… task'ΠΎΠ² (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ список)

// Groovy DSL
task TaskA {
    doFirst { println "running TaskA" }
}

task TaskB {
    dependsOn "TaskA"
    doFirst { println "running TaskB" }
}

2

finalizedBy() β€” Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ послС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ выполнится таск. Finalized task выполнится, Π΄Π°ΠΆΠ΅ Ссли Ρ‚ΠΎΡ‚, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ зависит, Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ.

// Groovy DSL
task TaskC {
    doFirst { println "running TaskC" }
}

task TaskB {
    finlizedBy "TaskC"
    doLast { 
        println "running TaskB" 
        throw new RuntimeException("WTF")
    }
}

3

shouldRunAfter() ΠΈ mustRunAfter() β€” Π—Π°Π΄Π°ΡŽΡ‚ порядок выполнСния тасков Π±Π΅Π· явных зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ dependsOn Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° запуск тасков, Π° Π’ΠžΠ›Π¬ΠšΠž Π½Π° порядок.

// Groovy DSL
task TaskA {
    doFirst { println "running TaskA" }
}

task TaskB {
    doLast { println "running TaskB" }
}

TaskA.mustRunAfter TaskB // ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ TaskA Π±Π΅Π· TaskB ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ)

shouldRunAfter() β€” порядок ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ (Ссли получился цикличСский порядок ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ)

mustRunAfter() β€” порядок тасков Π΄ΠΎΠ»ΠΆΠ΅Π½ выполнятся всСгда

4

Inputs and Outputs

  • ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ссли task зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Ρ‚ΠΎ ΠΎΠ½ ΠΆΠ΄Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ task.

  • Π’ gradle ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ таска с Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ явно Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ зависимости Ρ‡Π΅Ρ€Π΅Π· dependsOn.

Π’ ΠΊΠΎΠ΄Π΅ это выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ

def producer = tasks.register("producer", Producer)
def consumer = tasks.register("consumer", Consumer)

// БвязываСм Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» Ρ€Π°Π·Π½Ρ‹Ρ… тасков
// Зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ тасками Π±ΡƒΠ΄ΡƒΡ‚ выставлСны автоматичСски
consumer.confugire {
    inputFile = producer.flatMap { it.outputFile }
}

Π€Π°Π·Ρ‹ сборки Gradle

  1. Initialization β€” Gradle провСряСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±ΠΈΠ»Π΄Π΅ ΠΈ создаСт инстансы Project

  2. Configuration β€” Π—Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ всС скрипты build.gradle Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ таски ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², строится Π³Ρ€Π°Ρ„ тасков

  3. Execution β€” Gradle запускаСт таски Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС Π½Π° основС Π³Ρ€Π°Ρ„Π°

settings.gradle

  • Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» сапускаСтся Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„Π°Π·Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

  • Π’Ρ‹Π·ΠΎΠ²Ρ‹ Π² этом Ρ„Π°ΠΉΠ»Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Settings

  • Для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… (multi-project) ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² settings.gradle Π½ΡƒΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

Project evaluation

  • Π’ΠΎ врСмя Ρ„Π°Π·Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Gradle ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, запускаСт build скрипт ΠΈ создаСт таски (Gradle ΡƒΠΌΠ΅Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ build-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ таска)

  • Π’ api Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎ ΠΈΠ»ΠΈ послС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ: ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ beforeEvaluate() ΠΈ afterEvaluate() Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

  • Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Ρƒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

gradle.properties

  • Π€Π°ΠΉΠ», Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ (Π° Π΅Ρ‰Π΅ Π² GRADLE_USER_HOME ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ gradle для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… свойств).

  • ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ JVM для запуска gradle (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, org.gradle.jvmargs=-Xmx4096m)

  • ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ самого Gradle

  • ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ свои свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доступны ΠΈΠ· gradle скриптов

  • вмСсто использования gradle.properties, свойства ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -p (ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π»ΠΎΠ³ΠΈΠ½ΠΎΠ² ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ)

Extra properties

МногиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Gradle (Π² Ρ‚ΠΎΠΌ числС Task ΠΈ Project) ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свойства Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠšΠ»ΡŽΡ‡ β€” это строка, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” это класс Object.

project.ext.test = "Test"   // Groovy DSL

// or

project.extra["test"] = "Test"   // Kotlin DSL

// or

project
    .getExtensions()
    .getExtraProperties()
    .set("test", "Test")

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

ВсС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ³ ΠΈΡ… сСбС ΠΏΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ. РаньшС Π±Ρ‹Π»ΠΈ популярны JCenter ΠΈ Google Maven, ΠΎΠ΄Π½Π°ΠΊΠΎ JCenter объявлСн ΠΊΠ°ΠΊ deprecated ΠΈ сСйчас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²:

  • google() (Google Maven)

  • mavenCentral()

  • ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Maven-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

  • Ivy

  • локальная файловая систСма

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ вСрсии доступны Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… рСпозиториях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ссылкС:

https://mvnrepository.com/artifact/<package-root>/<package-name>
  • Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ build-скрипту ΠΈΠ»ΠΈ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ: ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π²ΠΎ врСмя Ρ„Π°Π·Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ gradle), Π²Ρ‚ΠΎΡ€Ρ‹Π΅ β€” Π²ΠΎ врСмя получСния зависимостСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ)

  • Π’ качСствС транспорта ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹

  • Π›ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· allprojects, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ врСмя ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

Dependencies

  • УказываСтся Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ для build-скрипта

  • Зависимости ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4")

  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Π΅ зависимости: implementation project(":core")

  • Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ зависимости: implementation fileTree(dir: 'libs', include: ['*.jar'])

  • Π”Π΅Ρ€Π΅Π²ΠΎ зависимостСй ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ таски dependencies β€” ./gradlew dependencies [--configuration implementation].

Modules

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ имСнования:

org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4

<group>:<name>:<version>

Configurations

  • КаТдая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ скоупу: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ зависимости Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя компиляции, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя тСстов, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² runtime ΠΈ Ρ‚.Π΄.

  • Для управлСния скоупами Π² gradle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² ConfigurationContainer

  • По сути конфигурация β€” это ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для зависимостСй

  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ extendsFrom()

  • Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ всС зависимости ΠΎΡ‚ своих Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ

  • ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ gradle создаСт ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (compile ΠΈ runtime β€” deprecated) для java gradle plugin:

Π’ java library plugin Π΅Ρ‰Π΅ появляСтся конфигурация api. Π•Π΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ implementation Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ доступ ΠΊΠΎ всСм зависимым модулям (Ρ€Π°Π½ΡŒΡˆΠ΅ compile Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Π» β€” ΠΎΠ½ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π» доступ ΠΊΠΎ всСм Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ зависимостям, implementation Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚).

compileOnly β€” конфигурация ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° этап ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ Π² runtime). implementation ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² runtime. Π“Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ compileOnly ΠΈ implementation ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ врСмя сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Resolution strategy

  • ΠœΠ΅ΠΆΠ΄Ρƒ зависимостями ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹

  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ gradle ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ… β€” Ρ‡Π΅Ρ€Π΅Π· resolution strategy

  • ПовСдСниС ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” gradle Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

configurations.all {
    resolutionStrategy.failOnVersionConflict()
}

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· resolution strategy

  • Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ зависимости (dependencySubstitution)

  • ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ (force)

  • Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Π΅ зависимости вмСсто Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… (preferProjectModules)

  • ΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ… (failOnVersionConflict)

  • ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ (snapshot)

Transitive dependencies

  • Π’Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости β€” это Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ зависимости прямой зависимости

  • Π£ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π΅ΡΡ‚ΡŒ Ρ„Π»Π°Π³ isTransitive(), Ссли ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ зависимости

  • Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ„Π»Π°Π³ Π΅ΡΡ‚ΡŒ Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

  • По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ isTransitive()=true, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ

dependencies {
    implementation('com.google.guava:guava:23.0') {
        transitive = false
    }
}

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ подтягиваСм зависимости guava ΠΊ сСбС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΡ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Dependency constraints

МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ограничСния для вСрсий ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· constraints, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости.

dependencies {
    implementation 'org.apache.httpcomponents:httpclient'
    constraints {
        implementation('org.apache.httpcomponents:httpclient:4.5.3')
        implementation('commons-codec:commons-codec:1.11')
    }
}

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ httpclient зависит ΠΎΡ‚ commons-codec, ΠΈ ΠΌΡ‹ Ρ‡Π΅Ρ€Π΅Π· constraints ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ фиксируСм Π²Π΅Ρ€ΡΠΈΡŽ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ зависимости.

Excluding transitive dependencies

МоТно ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости Ρ‡Π΅Ρ€Π΅Π· exclude (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ нас Π΄Π²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ тянут ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ зависимости; ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ спокойно ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ зависимостСй ΠΈ всС Π±ΡƒΠ΄Π΅Ρ‚ спокойно ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ):

dependencies {
    implementation('log4j:log4j:1.2.15') {
        exclude group: 'javax.jms', module: 'jms'
        exclude group: 'com.sun.jdmx', module: 'jmxtools'
        exclude group: 'com.sun.jmx', module: 'jmxri'
    }
}

Because

ВмСсто ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ зависимостям, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство because. ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π΄Π΅Ρ€Π΅Π²Π° зависимостСй, этот ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ отобразится Π² консоли :)

implementation('log4j:log4j:1.2.15') {
    because "We love log4j"
}

Plugins

  • ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ написаны скриптом, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ jar (ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚) ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² buildSrc

  • Π”ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ таски, свойства, зависимости, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

  • Π Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ DSL ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡƒΡŽ модСль

  • Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ

Π•ΡΡ‚ΡŒ встроСнныС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ вмСстС с gradle. НапримСр, java plugin, java library plugin.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ скриптового ΠΏΠ»Π°Π³ΠΈΠ½Π°:

apply from: 'other.gradle'

Binary plugins ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, доступны ΠΈΠ· рСпозитория ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· старый синтаксис "apply plugin" ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ plugins{} (всСгда Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ).

SourceSets

  • Java Plugin (ΠΈΠ»ΠΈ Kotlin Plugin) вносит Π² Π΄ΠΎΠΌΠ΅Π½Π½ΡƒΡŽ модСль Gradle Ρ‚Π°ΠΊΠΎΠ΅ понятиС ΠΊΠ°ΠΊ source set

  • Source Sets ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы ΠΈ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π² логичСскиС Π³Ρ€ΡƒΠΏΠΏΡ‹

  • Java Plugin создаСт для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Source Set ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ таск compileSourceSetJava ΠΈ нСсколько ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ (для Source Set "main" имя опускаСтся β€” compileJava)

  • Аналогично для рСсурсов ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ таски processSourceSetResources.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// Groovy DSL
sourceSets {
    main {
        java {
            srcDirs = [
                "src/main/java",
                "${protobuf.generatedFilesBaseDir}/main/javalite"
            ]
            exclude 'some/unwanted/package/**'
        }
    }
}

Flavors & BuildTypes

  • Build types β€” Ρ‚ΠΈΠΏΡ‹ сборок, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ release ΠΈ debug, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

  • Product flavors β€” Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ сборки ΠΏΠΎ Ρ„ΠΈΡ‡Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, платная вСрсия ΠΈ с ΡƒΡ€Π΅Π·Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ)

  • Build variants β€” всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Build types ΠΈ Product flavors

  • Π’ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ прСдставлСны ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ классами: BuildType, ProductFlavor ΠΈ BaseVariant (содСрТит BuildType ΠΈ ProductFlavor)

  • BuildType ΠΈ ProductFlavor Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ BaseConfigImpl

Для всСх Π½ΠΈΡ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ source set'Ρ‹ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ таски.

flavor dimension - ΠΏΠΎΠ΄ этим ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

flavorDimensions "site", "endpoint", "market"

productFlavors - здСсь ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния для dimension. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

productFlavors {
        prod {
            dimension 'endpoint'
            applicationId 'blabla1'
        }

        staging {
            dimension 'endpoint'
            applicationId 'blabla2'
            здСсь ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π² defaultConfig)
        }

        google {
            dimension 'market'
        }

        amazon {
            dimension 'market'
        }

    }

Π—Π΄Π΅ΡΡŒ: Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ endpoint ΠΌΠΎΠ³ΡƒΡ‚ содСрТатся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: prod, staging

Π”Π°Π»Π΅Π΅, эти значСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ buildTypes (ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ?)

Kotlin & Groovy DSL

buildSrc & Version Catalog

Особая дирСктория Gradle, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ выносятся:

  • константы

  • внСшниС зависимости ΠΈ вСрсии

  • ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

  • таски для сборки

  • ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для сборки

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ этой Ρ„ΠΈΡ‡ΠΈ, добавляСм Π² settings.gradle.kts:

enableFeaturePreview("VERSION_CATALOGS")

ΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ gradle ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ toml-Ρ„Π°ΠΉΠ» libs.versions.toml.

Π’ΠΎΡ‚ здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ вСрсии доступны Π² google maven Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ (google()):

НапримСр, для ΠΏΠ°ΠΊΠ΅Ρ‚Π° org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ доступных вСрсиях Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… рСпозиториях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ссылкС:

Gradle Kotlin DSL Usage:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° этому β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Version Catalog (появился Π² 7-ΠΉ вСрсии Gradle ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Kotlin DSL) ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ мСсто Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ вСрсиях Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠŸΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:

https://www.youtube.com/watch?v=WOBok2u-SL8
https://kotlinlang.org/docs/gradle.html
https://github.com/IkeMurami-Examples/KotlinMultiplatformExample
https://kotlinlang.org/docs/multiplatform-mobile-samples.html
https://gradle.org/releases/
https://mvnrepository.com/artifact/com.android.tools.build/gradle-api?repo=google
https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin
https://github.com/IkeMurami-Examples/AndroidAppExamples/tree/main/KotlinDSLUsage
https://github.com/IkeMurami-Examples/KotlinMultiplatformExample
https://habr.com/ru/post/560868/