Creating a custom plugin
One of the great features of Gradle is the support for plugins. A plugin can contain tasks, configurations, properties, methods, concepts, and more to add extra functionality to our projects. For example, if we apply the Java plugin to our project, we can immediately invoke the compile, test, and build tasks. Also, we have new dependency configurations we can use and extra properties we can configure. The Java plugin itself applies the java-base plugin. The java-base plugin doesn't introduce tasks, but the concept of source sets. This is a good pattern for creating our own plugins, where a base plugin introduces new concepts and another plugin derives from the base plugin and adds explicit build logic-like tasks.
So a plugin is a good way to distribute build logic that we want to share between projects. We can write our own plugin, give it an explicit version, and publish it to, for example, a repository. Other projects can then re-use the functionality by simply...