/usr/share/doc/gradle/userguide/overview.html is in gradle-doc 2.10-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Chapter 2. Overview</title><link xmlns:xslthl="http://xslthl.sf.net" type="text/css" rel="stylesheet" href="base.css"><link xmlns:xslthl="http://xslthl.sf.net" type="text/css" rel="stylesheet" href="docs.css"><link xmlns:xslthl="http://xslthl.sf.net" type="text/css" rel="stylesheet" href="userguide.css"><meta content="DocBook XSL Stylesheets V1.79.1" name="generator"><link rel="home" href="userguide.html" title="Gradle User Guide"><link rel="up" href="pt01.html" title="Part I. About Gradle"><link rel="prev" href="introduction.html" title="Chapter 1. Introduction"><link rel="next" href="pt02.html" title="Part II. Working with existing builds"></head><body><div class="navheader"><div><div class="navbar"><a xmlns:xslthl="http://xslthl.sf.net" href="introduction.html" title="Chapter 1. Introduction">Previous</a><span>|</span><a xmlns:xslthl="http://xslthl.sf.net" href="userguide.html" title="Gradle User Guide">Contents</a><span>|</span><a xmlns:xslthl="http://xslthl.sf.net" href="pt02.html" title="Part II. Working with existing builds">Next</a></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 xmlns:xslthl="http://xslthl.sf.net"><a name="overview"></a>Chapter 2. Overview</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="sec:special_feature_of_gradle"></a>2.1. Features</h2></div></div></div><p>Here is a list of some of Gradle's features.
</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Declarative builds and build-by-convention</span></dt><dd><p>At the heart of Gradle lies a rich extensible Domain Specific Language (DSL) based on Groovy.
Gradle pushes declarative builds to the next level by providing declarative language elements
that you can assemble as you like. Those elements also provide build-by-convention support for
Java, Groovy, OSGi, Web and Scala projects. Even more, this declarative language is extensible.
Add your own new language elements or enhance the existing ones, thus providing concise,
maintainable and comprehensible builds.
</p></dd><dt><span class="term">Language for dependency based programming</span></dt><dd><p>The declarative language lies on top of a general purpose task graph, which you can fully
leverage in your builds. It provides utmost flexibility to adapt Gradle to your unique needs.
</p></dd><dt><span class="term">Structure your build</span></dt><dd><p>The suppleness and richness of Gradle finally allows you to apply common design principles to your build.
For example, it is very easy to compose your build from reusable
pieces of build logic. Inline stuff where unnecessary indirections would be inappropriate. Don't be
forced to tear apart what belongs together (e.g. in your project hierarchy). Avoid smells
like shotgun changes or divergent change that turn your build into a maintenance nightmare.
At last you can create a well structured, easily maintained, comprehensible build.</p></dd><dt><span class="term">Deep API</span></dt><dd><p>From being a pleasure to be used embedded to its many hooks over the whole lifecycle of build
execution, Gradle allows you to monitor and customize its configuration and execution behavior
to its very core.
</p></dd><dt><span class="term">Gradle scales</span></dt><dd><p>Gradle scales very well. It significantly increases your productivity,
from simple single project builds up to huge enterprise multi-project builds. This is true
for structuring the build. With the state-of-art incremental build function, this is also true for
tackling the performance pain many large enterprise builds suffer from.
</p></dd><dt><span class="term">Multi-project builds</span></dt><dd><p>Gradle's support for multi-project build is outstanding. Project dependencies are first class
citizens. We allow you to model the project relationships in a multi-project build as they really
are for your problem domain. Gradle follows your layout not vice versa.
</p><p>Gradle provides partial builds. If you build a single subproject Gradle takes care of building
all the subprojects that subproject
depends on. You can also choose to rebuild the subprojects that depend on a particular subproject.
Together with incremental builds this is a big time saver for larger builds.
</p></dd><dt><span class="term">Many ways to manage your dependencies</span></dt><dd><p>Different teams prefer different ways to manage their external dependencies.
Gradle provides convenient support for any strategy. From transitive dependency
management with remote Maven and Ivy repositories to jars or directories on the local file system.</p></dd><dt><span class="term">Gradle is the first build integration tool</span></dt><dd><p>Ant tasks are first class citizens. Even more interesting, Ant projects are first class citizens as well.
Gradle provides a deep import for any Ant project, turning Ant targets into native Gradle tasks at runtime.
You can depend on them from Gradle, you can enhance them from Gradle, you can even declare dependencies on
Gradle tasks in your build.xml. The same integration is provided for properties, paths, etc ...</p><p>Gradle fully supports your existing Maven or Ivy repository infrastructure for publishing and retrieving
dependencies. Gradle also provides a converter for turning a Maven <code class="filename">pom.xml</code> into a Gradle script.
Runtime imports of Maven projects will come soon.</p></dd><dt><span class="term">Ease of migration</span></dt><dd><p>Gradle can adapt to any structure you have. Therefore you can always develop your Gradle build
in the same branch where your production build lives and both can evolve in parallel.
We usually recommend to write tests that make sure that the produced artifacts are similar.
That way migration is as less disruptive and as reliable as possible. This is following the best-practices
for refactoring by applying baby steps.
</p></dd><dt><span class="term">Groovy</span></dt><dd><p>Gradle's build scripts are written in Groovy, not XML. But unlike other approaches this is not
for simply exposing the raw scripting power of a dynamic language. That would just lead to a very
difficult to maintain build. The whole design of Gradle is oriented towards being used as a language,
not as a rigid framework. And Groovy is our glue that allows you to tell your individual story with
the abstractions Gradle (or you) provide. Gradle provides some standard stories but they are not
privileged in any form. This is for us a major distinguishing feature compared to other declarative
build systems. Our Groovy support is not just sugar coating. The whole Gradle API
is fully Groovy-ized. Adding Groovy results in an enjoyable and productive experience.
</p></dd><dt><span class="term">The Gradle wrapper</span></dt><dd><p>The Gradle Wrapper allows you to execute Gradle builds on machines where Gradle is not
installed. This is useful for example for some continuous integration servers. It is also
useful for an open source project to keep the barrier low for building it. The wrapper is also
very interesting for the enterprise. It is a zero administration approach for the client machines.
It also enforces the usage of a particular Gradle version thus minimizing support issues.
</p></dd><dt><span class="term">Free and open source</span></dt><dd><p>Gradle is an open source project, and is licensed under the <a class="ulink" href="http://www.gradle.org/license" target="_top">ASL</a>.
</p></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="sec:why_groovy"></a>2.2. Why Groovy?</h2></div></div></div><p>We think the advantages of an internal DSL (based on a dynamic language) over XML are tremendous when used
in <span class="emphasis"><em>build scripts</em></span>. There are a couple of dynamic languages out there. Why Groovy? The
answer lies in the context Gradle is operating in. Although Gradle is a general purpose build tool at its
core, its main focus are Java projects.
In such projects the team members will be very familiar with Java. We think a build
should be as transparent as possible to <span class="emphasis"><em>all</em></span> team members.
</p><p>In that case, you might argue why we don't just use Java as the language for build scripts. We think this is a valid
question. It would have the highest transparency for your team and the lowest learning curve, but because of the
limitations of Java, such a build language would not be as nice, expressive and powerful as it could be.
<a href="#ftn.N100C4" class="footnote" name="N100C4"><sup class="footnote">[1]</sup></a>
Languages like Python, Groovy or Ruby do a much better job here. We have chosen Groovy as it offers by far
the greatest transparency for Java people. Its base syntax is the same as Java's as well as its type system,
its package structure and other things. Groovy provides much more on top of that, but with the common foundation
of Java.
</p><p>For Java developers with Python or Ruby knowledge or the desire to learn them, the above arguments
don't apply. The Gradle design is well-suited for creating another build script engine in JRuby or Jython.
It just doesn't have the highest priority for us at the moment. We happily support any community effort
to create additional build script engines.
</p></div><div class="footnotes"><br><hr width="100" align="left"><div id="ftn.N100C4" class="footnote"><p><a href="#N100C4" class="para"><sup class="para">[1] </sup></a>At
<a class="ulink" href="http://www.defmacro.org/ramblings/lisp.html" target="_top">http://www.defmacro.org/ramblings/lisp.html</a>
you find an interesting article comparing Ant, XML, Java and Lisp. It's funny that the 'if Java had
that syntax' syntax in this article is actually the Groovy syntax.
</p></div></div></div><div class="navfooter"><div><div class="navbar"><a xmlns:xslthl="http://xslthl.sf.net" href="introduction.html" title="Chapter 1. Introduction">Previous</a><span>|</span><a xmlns:xslthl="http://xslthl.sf.net" href="userguide.html" title="Gradle User Guide">Contents</a><span>|</span><a xmlns:xslthl="http://xslthl.sf.net" href="pt02.html" title="Part II. Working with existing builds">Next</a></div></div></div></body></html>
|