Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Training: Day Two - Eclipse, Git, Maven

Training: Day Two - Eclipse, Git, Maven

This is the second in our four part training sessions introducing FenixEdu development for new collaborators.

In this second session, we introduce some of the tools used in FenixEdu development, Eclipse, Git and Maven

Avatar for Artur Ventura

Artur Ventura

October 11, 2013

More Decks by Artur Ventura

Other Decks in Technology

Transcript

  1. CODE STYLE Golden Rule ALWAYS USE THE GOD DAMN STYLE

    ✓ Minimize the change set on commits and conflicts ✓ Ease the overall readability of the code base ✓ Format the code automatically via IDE save actions Benefits When working on a large team, code style is no place to be creative.
  2. SAVE ACTIONS Save actions allow you to automate a set

    of tasks that will Golden Rule ALWAYS ENABLE THE GOD DAMN SAVE ACTIONS ✓ Code style is applied automatically ✓ Imports are organized according to the same set of rules ✓ Minimize the change set on commits and conflicts Benefits
  3. BUILD AUTOMATICALLY When handling big projects, the build automatically feature

    can be an unpleasant experience. Golden Rule SAY NO TO BUILD AUTOMATICALLY ✓ Eclipse will be more responsive ✓ Embedded servlet containers will not react to code changes ✓ Embrace the limitations of FenixFramework Benefits
  4. ECLIPSE JEDI If you want to maximize your productivity, you

    should use less mouse and more keyboard. Golden Rule LEARN YOUR TOOL AND SOME DAMN SHORTCUTS ✓ Increase your productivity ✓ Fix and solve your problems quicker ✓ Look smart and geek Benefits
  5. ECLIPSE JEDI - SHORTCUTS Some of the most commonly used

    shortcuts Auto-complete Ctrl+Space Fix Formatting Ctrl+Shift+F Open Resource Ctrl+Shift+R Open Type Ctrl+Shift+T Ctrl+O Quick Outline Ctrl+L Go to Line Ctrl+T Quick Hierarchy
  6. GIT

  7. WHAT IS GIT? Distributed Version Control System (DVCS) that provides

    local branching for free. Golden Rule SNAPSHOTS NOT DIFFERENCES ✓ Each clone is a safety copy ✓ Local branching is free of headaches ✓ Lots of awesome features (stash, rebase, squash, etc...) Benefits
  8. SVN VS GIT Version 1 Version 2 Version 3 Version

    4 Version 5 file A file B file C Δ1 Δ2 Δ1 Δ2 Δ1 Δ2 Δ3 Checkins over time Version 1 Version 2 Version 3 Version 4 Version 5 A B C Checkins over time A1 B C1 A1 B C2 A2 B1 C2 A2 B2 C3 SVN GIT
  9. GIT REPOSITORY A GIT repository, among other artifacts, is essentially

    composed by: ✓ A set of commits ✓ A set of references (pointers) to commits (aka heads) efc3a a4b4a d56d4 44d5c head A head B
  10. COMMIT ✓ A set of files (blobs) that reflect the

    state of the project at a particular time ✓ Reference to the parent commits (i.e. the set of states from which the new state was originated from) ✓ A SHA1 name which grants the commit unicity and checksum properties A commit comprehends: efc3a a4b4a
  11. HEAD ✓ A reference to a particular commit with a

    more human perceptive name ✓ A Git repository can have any number of heads ✓ At a given time, one of the heads is selected as the current head, which is also a reference called HEAD efc3a a4b4a d56d4 44d5c head A head B HEAD
  12. INITIALIZING THE REPOSITORY Git repositories work using your filesystem The

    repository is handled in the .git folder in the root of your project $ git init
  13. STAGE ONE OR MORE FILES $ touch README.md $ git

    add README.md working directory staging area git repository git commit git checkout git add git reset HEAD
  14. MERGING (6) $ git merge feature/x efc3a ac2ad 4ecd4 master

    feature/x HEAD f3d3e 4ecd4 Ugly History
  15. DELETING A BRANCH $ git branch -d feature/x Ugly History

    efc3a ac2ad 4ecd4 master HEAD f3d3e 4ecd4
  16. REBASE (2) $ git rebase -i master efc3a ac2ad 4ecd4

    master feature/x HEAD 2fd3e f3d3e
  17. GITHUB A service that hosts Git repositories online with extra

    features ✓ Create forks from other repositories ✓ Push commits to your own fork ✓ Request pulls from your fork (e.g. pull-requests) Contribution Methodology
  18. CLONE $ git clone --origin fork [email protected]:davidmartinho/fenix The clone command

    creates a full copy of the repository, i.e. all commits, tags and heads. $ git remote add origin https://github.com/FenixEdu/fenix.git Clone your fork Add FenixEdu as a remote to fetch updates (the --origin fork is to name the remote fork instead of the default origin) Pull from FenixEdu with rebase to keep history clean $ git pull --rebase origin master
  19. PULL REQUESTS The pull request is not a git feature.

    Github has this pull request feature to improve contributions and allows developers to merge outside contributions directly on github. Golden Rule ALWAYS MAKE PULL REQUEST ON FENIX
  20. WHAT IS MAVEN? Golden Rule DEPENDENCIES BINARIES HAVE NO PLACE

    IN VCS ✓ Convention over Configuration ✓ Keeps the VCS repository out of binaries ✓ Format the code automatically via IDE save actions Benefits Maven is much more than a project building tool. It allows you to build and manage your project.
  21. MAVEN BUILDING BLOCKS LIFECYCLES Maven knowns how a project is

    cleaned and built. A lifecycle is essentially a pre-defined list of phases to ensure such clean and build processes. PLUGINS The phases by themselves are worthless. We associate plugin goals (implemented by Mojos) to one of the phases.
  22. CLEAN LIFECYCLE pre-clean execute necessary tasks prior to project clean

    clean deletes all files generated during the building process post-clean executes necessary tasks needed after the building process pre-clean clean post-clean
  23. HOW DOES IT WORK? generate-sources compile process-classes prepare-package package install

    deploy maven-compiler-plugin ff maven plugin maven-jar-plugin
  24. POM (Project Object Model) ✓ Declarative XML file ✓ Identifies

    your project (groupId, artifactId, version, packaging) ✓ Declares the project dependencies and their scopes ✓ Declares which plugin goals should run on which phase ✓ Declare additional repositories for the dependencies
  25. REPOSITORIES MAVEN CENTRAL REPOSITORY Contains most of the commonly known

    Java libraries (e.g. log4j, hibernate, jodatime, etc...) DSI NEXUS REPOSITORY Contains our binaries (e.g. fenix-framework, tools, bennu, workflow, organization, etc...) PROXIED THIRD-PARTY REPOSITORIES Nexus allows us to proxy and cache some other third-party repositories. Good when they’re out-of- service
  26. INSTALL VS DEPLOY $ mvn clean install ~/.m2/repository $ mvn

    clean deploy ☁fenix-ashes.ist.utl.pt/nexus