Gradle, a new generation of DSL-based Java build tool, and a new generation of gradle

Source: Internet
Author: User
Tags netbeans

Gradle, a new generation of DSL-based Java build tool, and a new generation of gradle

What is Gradle?
Gradle is an automated build tool based on the Groovy language and mainly for Java applications and DSL syntax. Speaking of Java's automated build tools, everyone must be familiar with Ant and Maven. Gradle is such a similar tool, but it is much more powerful than Ant and Maven.

What can Gradle do?
Gradle uses easy-to-understand DSL syntax to compile, build, test, package, and deploy tasks required during the development process, making it very simple and easy to reuse. Moreover, the most important thing is that in Gradle, you can define your own model as needed, unlike in maven, xml already limits the model you use.

What are the advantages of Gradle?

Gradle has many advantages. Here we will first look at the main advantages:

1. Dependency Management

Maven is required for dependency management. I believe that one of the main reasons why many developers like maven is maven dependency management. For example, the following is the configuration of maven's junit dependency:

<Project xmlns = "http://maven.apache.org/pom/4.0.0” xmlns: xsi =" Http://www.w3.org/2001/XMLSchema-instance"Xsi: schemaLocation =" Http://maven.apache.org/POM/4.0.0  Http://maven.apache.org/xsd/maven-4.0.0.xsd">
<ModelVersion> 4.0.0 </modelVersion>
<GroupId> com. mycompany. app </groupId>
<ArtifactId> my-app </artifactId>
<Packaging> jar </packaging>
<Version> 1.0-SNAPSHOT </version>
<Dependencies>
<Dependency>
<GroupId> junit </groupId>
<ArtifactId> junit </artifactId>
<Version> 3.8.1 </version>
<Scope> test </scope>
</Dependency>
</Dependencies>
</Project>

In comparison, let's see how Gradle works:

Apply plugin: "java"
Group = "com. mycompany. app"
ArchivesBaseName = "my-app"
Version = "1.0-SNAPSHOT"
Repositories {
MavenCentral ()
}
Dependencies {
TestCompile "junit: 3.8.1 ″
}

Not only does it have less code, but it looks clear at a glance.


2. Task

Similar to Ant, Gradle uses tasks as the smallest running unit.

First, let's take a look at the definition of task in ant.

<? Xml version = "1.0"?>
<Project name = "foo">
<Target name = "hello">
<Echo> Hello World </echo>
</Target>
</Project>

 

Let's take a look at how Gradle works.

Task hello <{
Println "Hello World"
}

For the "Hello World" of only one row, the two may look similar. However, just imagine that Ant uses a defined task to do things, while Gradle uses a Groovy dynamic script for implementation, as long as you are familiar with Groovy, you can do anything you want in the build script.


3. Flexibility

For Ant or Maven, XML or plug-ins are generally used to define the building. Due to XML defects (complicated and difficult to read, it can only describe data rather than the process), in complicated projects, maintaining XML configurations is a nightmare. Instead, Gradle is built using the groovy scripting language, so Groovy code can be flexibly used in the build, not just a single model of constraints and XML.

Task time <{
Int hours = new Date (). hours
Switch (hours ){
Case 0 .. 11:
Println "Good Morning! It's $ {hours} am ."
Break
Case 12 .. 17: // noon to 5
Println "Good Afternoon! It's $ {hours> 12? Hours-12: hours} pm ."
Break
Default: // 6 to 11 pm
Println "Good Evening! It's $ {hours-12} pm. Shouldn't you be going home ?"
}
}


4. scalability

Relying on the dynamic nature of Groovy, Gralde can write DSL-based code, which is easy to maintain for complicated projects.

In addition, Gradle also supports plug-ins. There are many available plug-ins for Gradle, such as Java, War, and Jetty, which are very convenient to use.


5. Community Support

The development of Gradle is inseparable from the support of the community. Currently, many well-known open-source components, such as Hibernate and Spring, have begun to use Gradle as an automated building tool.
This article explains why the author of Hibernate gave up maven and switched to Gradle:

In addition, the official Gradle website also provides very detailed documents and examples, it is easy to get started.


6. Summary
Finally, let's take a look at a comparison between Maven and Gradle:

MavenPros

* Lots of third party plugins for tasks

* Fairly robust IDE support (eclipse, netbeans, intellij)

* Dependency management

* Jetty plugin (you can run the web app off the compiled source with hot deployment)

 MavenCons

* XML based configuration. which usually ends up being very verbose.

* Writing simple and custom tasks (for instance copy a set of files somewhere) is tedious.

You have to write a plugin and testing + development time for simple tasks may end up too long and time consuming.

For things to go smooth you usually will have to followMavenConventions and standard plugins.

* Everything is a plugin. Even simple tasks like compile and running tests.

So for a fresh project, downloading all the plugins takes considerable time.

Plus there might be updates to the plugin which will be downloaded occasionally when you run the build.

* LotsMavenPlugins usually have problems and a general opinion is that it is hard to debug.

* Building is slow compared to ant andGradle

* Does not prepare the html unit test case report by default (but something called a surefire reports)


 Gradle(Pros)

* Based on groovy. Scripting tasks are quite coz it is in a programming language.

* Uses ivy dependency management (which usesMavenRepositories). Dependency downloads are quite fast.

* Integrates ant tasks also.

* Supports the standard directory layout.

So for compilation, testing and packaging no extra tasks need to be written as long the files are in the layout.

* Come bundles with a default set of plugins which are coreGradle. So it does not have to download/update plugins

* Builds are quite fast.

* Standard junit reports

* Supports jetty server

Gradle(Cons)

* IDE support or the lack of it. Eclipse does not come with good supportGradleOr groovy.

Intellij idea and netbeans supports it (idea supportsGradleProjects) however.

* Third party plugin support is not as goodMaven

 

Overall, Gradle's advantages have become increasingly obvious. If it is a new project, do not hesitate to go directly to Gradle. There is definitely a different experience. :)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.