Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

ICONUK 2015 - Gradle Up!

756 vues

Publié le

These slides have been shown at ICONUK 2015 in London and show an introduction for using the Gradle build system.

Publié dans : Logiciels
  • Soyez le premier à commenter

ICONUK 2015 - Gradle Up!

  1. 1. 1 Gradle Up! René Winkelmeyer midpoints GmbH
  2. 2. 2 René Winkelmeyer Head of Development midpoints GmbH http://www.midpoints.de IBM Advanced Business Partner IBM Design Partner (Notes Domino, Mobile, Verse) Apple Enterprise Developer und MDM Group Member Samsung Enterprise Alliance Partner Services - Enterprise Mobility Service - Mobile Device und Application Management - IBM Traveler und IBM Mobile Connect About me
  3. 3. 3 •  Skype muenzpraeger •  Twitter muenzpraeger •  LinkedIn muenzpraeger •  Slideshare muenzpraeger •  Web https://blog.winkelmeyer.com http://www.midpoints.de •  Mail mail@winkelmeyer.com rene.winkelmeyer@midpoints.de OpenNTF •  File Navigator •  Generic NSF View Widget for IBM Connections About me René Winkelmeyer Head of Development
  4. 4. 4 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  5. 5. 5 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  6. 6. 6 Why this session? Doing things for a first time? Doing things for a second time? Doing things more often? Noteworthy: http://www.slideshare.net/HollyCummins/confessions-of-an-automation-addict Shoot and forget! Write down the needed steps. Automate!
  7. 7. 7 Tasks excerpt in software development and delivery Compile binary code Set version number Execute integration tests Generate JavaDoc Resolve/update dependencies Modify MANIFEST.MF Deploy to QA system Generate production package Compile binary code Automated code validation Set binary file name ... Debugging Continous Integration Deploy to different platforms Generate installers Execute regression tests Include documentation Apply translations ... ... ... ... ...
  8. 8. 8 Tasks excerpt in software development and delivery Compile binary code Set version number Execute integration tests Generate JavaDoc Resolve/update dependencies Modify MANIFEST.MF Deploy to QA system Generate production package Compile binary code Automated code validation Set binary file name ... Debugging Continous Integration Deploy to different platforms Generate installers Execute regression tests Include documentation Apply translations ... ... ... ... ...
  9. 9. 9 Example A – Resolve/update dependencies §  You want to use a specific 3rd party library, i. e. for supporting MIME SMTP Mailing (mail-1.3.4.jar) Search, compile and copy hell mail-1.3.4 slf4j-3.1.1 commons-io-4.2.1 guava-17.1 log4j-2.3.4
  10. 10. 10 Example A – Resolve/update dependencies §  The 3rd party library needs to be updated from mail-1.3.4.jar to mail-1.4.1.jar Search, compile, delete and copy hell mail-1.4.1 slf4j-4.2.1 log4j-2.5.1 commons-io-4.4.5 guava-17.1 commons- codec-2.1.3
  11. 11. 11 Example B – Automated code validation §  Code validation can be done using 3rd party libraries/tools §  FindBugs §  CheckStyle §  PMD §  ... Who executes them – and when? Where are they executed? IDE? Where are they documented?
  12. 12. 12 Example C: Set version number §  Define the version number so that it can be re-used §  In the UI of your web application §  In the file name of the compiled code §  In the attached product documentation/help §  In JavaDoc §  ... Where do you set it nowadays?
  13. 13. 13 Example D: Generate production package §  Generate a production ready package with the same servlet based application (optionally including server configuration) for §  Domino HTTP §  WebSphere Liberty §  TomEE §  ... Who maintains the needed steps?
  14. 14. 14 Build automation – some PROs §  Frees YOU from the hassle of repeating tasks §  Makes SURE that you can concentrate on the essential part – coding §  Helps to enforce STANDARDS across multiple developers and/or projects §  Eases the MAINTAINABILITY of your applications §  And much more!
  15. 15. 15 Automated Builds (here: Atlassian Bamboo)
  16. 16. 16 Build automation – It’s not for free! §  Takes some time for adoption! §  You‘ve to give up some (bad) habits. §  Infrastructure needed (i. e. for automated testings).
  17. 17. 17 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  18. 18. 18 Why Gradle - and not Maven or Ant? §  Please not the same discussion as with Windows vs. Linux §  All widely accepted §  Personal preferences may apply (like XML vs. custom DSL) §  Make your choice!
  19. 19. 19 Why Gradle - and not Maven or Ant? Source: http://zeroturnaround.com/rebellabs/java-build-tools-part-2-a-decision-makers-comparison-of-maven-gradle-and- ant-ivy/
  20. 20. 20 Why Gradle - and not Maven or Ant? convention-over-configuration vs. configuration-over-convention
  21. 21. 21 Example configuration (Maven vs. Gradle) §  Comparing a simple build configuration for code testing purposes §  Use JUnit and Hamcrest §  Apply CheckStyle, FindBugs and PMD Source: http://technologyconversations.com/2014/06/18/build-tools/ Code: https://github.com/vfarcic/JavaBuildTools
  22. 22. 22 Maven configuration (pom.xml)
  23. 23. 23 Gradle configuration (build.gradle)
  24. 24. 24 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  25. 25. 25 Basics – General §  Gradle is built on top of Groovy – you „configure“ in code! §  You don‘t have to learn Groovy in the first place when using Gradle. §  https://en.wikipedia.org/wiki/Groovy_(programming_language) §  Build scripts are using a custom DSL (Domain Specific Language) §  https://docs.gradle.org/current/dsl/index.html
  26. 26. 26 Basics – DSL
  27. 27. 27 Basics – Releases and availability §  New versions are delivered every 4-6 weeks §  Current version is 2.7 (14.09.2015) §  Release Notes: https://docs.gradle.org/2.7/release-notes §  Download: https://gradle.org/gradle-download/
  28. 28. 28 Components gradle gradlew Gradle daemon build.gradle settings.gradle gradle.properties Binaries Configuration
  29. 29. 29 Binaries §  You can use either way the gradle executable of the binary package or the gradle wrapper (gradlew). §  The wrapper allows you to use Gradle on systems that don‘t have Gradle installed (yet) §  Enhance your build times by using the daemon §  https://docs.gradle.org/2.7/userguide/gradle_daemon.html
  30. 30. 30 Configuration – Global §  Custom global properties can be set via a gradle.properties file §  Project build dir §  Users gradle home dir (i. e. ~/.gradle/ on *nix systems) §  Via System properties §  Define proxy settings, passwords for remote repository access and much more §  https://docs.gradle.org/current/userguide/build_environment.html
  31. 31. 31 Configuration – Project specific §  Gradle uses two build script files §  build.gradle §  settings.gradle §  Minimum in the root of the project folder structure §  Can have more of them in a multi-project structure
  32. 32. 32 Tasks §  Gradle offers you a variety of built-in tasks. §  Tasks can either run standalone – or they depend on the successful execution of other tasks and run in a chain. §  Configuration provided in the build.gradle file or via (custom) plugins. §  You can write custom tasks directly in the build.gradle file.
  33. 33. 33 Task example – gradle init §  Creates a new Gradle project according to the specified type (or a basic Gradle project if no type is supplied) Dedicated tasks Different types for init are available
  34. 34. 34 Task example – gradle tasks §  Lists all tasks that are available to the current project Name and description
  35. 35. 35 Tasks – gradle test §  Runs the test cases of the project (if you test your code ;-)) Gradle stores hash values of task in- and output and skips the processing if no changes haven been made.
  36. 36. 36 IDE integration (here: Eclipse) I recommend this at the moment Relatively new, needs improvement
  37. 37. 37 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  38. 38. 38 Your first Gradle project – start small §  We‘ll create a simple Java project here §  Init a standalone project (non-Eclipse specific) §  Learn about the project structure §  Generate a runnable JAR file §  Run the JAR file
  39. 39. 39 Init the project
  40. 40. 40 Learn about the project structure build script build script Gradle wrapper files Example source code
  41. 41. 41 Starting point for a build.gradle configuration Standard and custom plugins are available jcenter references to Bintray, you can also use i. e. mavenCentral, mavenLocal and local directoreis Define the needed dependencies that are needed by this project.
  42. 42. 42 Assemble the JAR file Gradle detects unavailable dependencies and downloads them automatically.
  43. 43. 43 Standard project structure The build directory contains the output of the Gradle build
  44. 44. 44 Run the assembled JAR file (or try to ;-)) The build/libs directory normally contains the generated packages.
  45. 45. 45 Add your first additional plugin Adding the „application“ plugin for getting a runnable JAR file New property that tells the „application“ plugin the name of the main class.
  46. 46. 46 Validate the new tasks (added by the plugin) New tasks
  47. 47. 47 Run the JAR file Output of the sample code
  48. 48. 48 Create a distribution package for the JAR file Task of the „application“ plugin
  49. 49. 49 Validate the distribution package installDist generates the fully runnable distribution package
  50. 50. 50 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  51. 51. 51 Building a web application §  We‘ll create a simple web application (with a single servlet) which will be used from within the Eclipse IDE §  Populate a blank build.gradle file with the needed settings §  Use Maven Central as remote repository §  Generate a WAR file §  Run the WAR in a Jetty container
  52. 52. 52 Populate new build.gradle file Code generation should respect Java 8 Plugins that help with Eclipse integration Adds tasks for WAR files
  53. 53. 53 Initialize Eclipse project Preparing the Gradle project for Eclipse
  54. 54. 54 Validate Eclipse data creation
  55. 55. 55 Import as “Gradle Project” 1/2
  56. 56. 56 Import as “Gradle Project” 2/2
  57. 57. 57 Create new Source Folders 1/2
  58. 58. 58 Create new Source Folders 1/2
  59. 59. 59 Create a simple servlet (or try to ;-)) HttpServlet isn‘t available
  60. 60. 60 Repository and dependency configuration Adding mavenCentral as new remote repo Adding the servlet classes as new dep
  61. 61. 61 Refresh dependencies to download them (if needed)
  62. 62. 62 “Finish” the simple servlet
  63. 63. 63 Add web.xml configuration 1/3
  64. 64. 64 Add web.xml configuration 2/3
  65. 65. 65 Add web.xml configuration 3/3
  66. 66. 66 Need to run the WAR? Here we go! Another plugin that allows quick tests within a Jetty container
  67. 67. 67 Quick start from within Eclipse Use the Quick Launcher to run the WAR in the Jetty container
  68. 68. 68 Using WebSphere Liberty? Lets ci.gradle help you! https://github.com/WASdev/ci.gradle
  69. 69. 69 Agenda §  Build Automation – Why? §  Why Gradle - and not Maven or Ant? §  Theory First - Gradle Basics §  Your first Gradle project – start small §  Building a web application §  Building an OSGi plug-in project
  70. 70. 70 Building an OSGi plugin §  Standard OSGi support in Gradle isn‘t very good §  A simple plugin to help with OSGi-Manifest generation §  https://docs.gradle.org/current/userguide/osgi_plugin.html And now what?
  71. 71. 71 Wuff – to the rescue? https://github.com/akhikhl/wuff
  72. 72. 72 Wuff – the solution? §  Great for all Eclipse related build tasks. §  Missing features – DIY §  Feature generation §  Updatesite creation
  73. 73. 73 Wuff – additional considerations (for Domino)
  74. 74. 74 Wuff – find the custom build here §  https://github.com/petarov/wuff Thanks to Petar, he did some of the dirty work
  75. 75. 75 Thank you!

×