Loading presentation...

Present Remotely

Send the link below via email or IM


Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.


Copy of Gradle - A Better Way To Build

New, better build system for Java projects - more power, less lock-in

Suhas Kelkar

on 4 December 2011

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Copy of Gradle - A Better Way To Build

Gradle - A better way to build Frameworkitis Infected Maven Frameworkitis is the disease that a framework wants to do too much for you or it does it in a way that you don't want but you can't change it. It's fun to get all this functionality for free, but it hurts when the free functionality gets in the way. But you are now tied into the framework. To get the desired behavior you start to fight against the framework. And at this point you often start to lose, because it's difficult to bend the framework in a direction it didn't anticipate. Toolkits do not attempt to take control for you and they therefore do not suffer from frameworkitis.
Erich Gamma There is no "One Size Fits All"
in Enterprise Build Systems! Default lifecycle? No build is the same Organizational constraints Legacy systems No more "build".
It's Project Automation. Release
management Version numbers Branching and tagging Deployment Documentation
generation Are th code samples up to date?
Use real tests code Compile
text sources
Are the code
samples up to date? Look, ma, Assembly Plugin! Infected Ant It's Not About
The Grammar Spring in XML? EJB2 in Groovy? It's About Too Much
Rigid Assumptions Diseases Definition Imperativeness Other Stuff Integration with Ant Use Ant Tasks Reuse Ant builds Integration with Maven Use Maven repositories Generate POMs Use POM dependency information POM to Gradle
migration Ivy for dependency Management Easy plugin development:
Groovy or Java Superior dependency manager Configurable conflicts management BTW, someone knows how Maven does it? Declarative, not Rigid You specify the "what"
Gradle figures out the "how" Plain Java Project No dictate Build Specific Language SourceSets Typed Tasks Archives Dependencies Projects Configurations Artifacts Plugins Custom Declarative Elements Declarative Feedom! Dependencies per Source Dir JDK per Source Dir Many Artifacts Per Project Many Sources Per Project Many Projects Per Source Dir Extenable Build Language
instead of Build Framework Separate Imperative from Declarative Imperative, not messy/i Custom Tasks/Plugins Use the power hidden in declarative ? What's your build tool? build files - haku or doostop? Multi-module - joy or pain? Unsusual tasks - ride or fight? Implementing something "nice-to-have" -
"With pleasure" or "forget it"? IDE support
CI Servers Support
Out of the box plugins
Community Tooling execution plan Code time! Code time! Code time! Code - last time! Mutli-module
build Actually, "no
code" time. Code, again!
Bedtime storry:
How to add integration
tests in Maven (with executable
before and after) Consider options of
integration tests in Maven:
Rename all integration tests Put tests under subdirectory Create separate module Use 2 executions of surefire plugin Use failsafe plugin Add surefire plugin section,
incuding only *Test
Add failsafe plugin section,
including only *IntegrationTest
Try to use maven exec plugin
in pre-integration-test and
post-integration-test phases:
Discover it doesn't have any forking option
Try to use antrun plugin
Checkout exec plugin
Change the plugin source to add forking option Discover it doesn't have any waiting option Change the plugin source once more Build, test and deploy the forked plugin Build, test and deploy the forked plugin Try to add another execution
in pre-integration-test and
bump into MNG-2258 Discover that it is a little-bit
heavy and look for skip option Build, test and deploy the forked plugin change the exec plugin code
to skip if no integration tests found How do you know?
There is no integration between plugins! Do something dirty @JBaruch
Full transcript