Upload
artur-ventura
View
423
Download
3
Tags:
Embed Size (px)
DESCRIPTION
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
Citation preview
ECLIPSE
CODE STYLE
Golden RuleALWAYS 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.
SAVE ACTIONS
Save actions allow you to automate a set of tasks that will
Golden RuleALWAYS 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
BUILD AUTOMATICALLY
When handling big projects, the build automatically feature can be an unpleasant experience.
Golden RuleSAY NO TO BUILD AUTOMATICALLY
✓ Eclipse will be more responsive
✓ Embedded servlet containers will not react to code changes
✓ Embrace the limitations of FenixFramework
Benefits
ECLIPSE JEDI
If you want to maximize your productivity, you should use less mouse and more keyboard.
Golden RuleLEARN YOUR TOOL AND SOME DAMN SHORTCUTS
✓ Increase your productivity
✓ Fix and solve your problems quicker
✓ Look smart and geek
Benefits
ECLIPSE JEDI - SHORTCUTS
Some of the most commonly used shortcuts
Auto-completeCtrl+Space
Fix FormattingCtrl+Shift+F
Open ResourceCtrl+Shift+R
Open TypeCtrl+Shift+T
Ctrl+O Quick Outline
Ctrl+L Go to Line
Ctrl+T Quick Hierarchy
GIT
WHAT IS GIT?
Distributed Version Control System (DVCS) that provides local branching for free.
Golden RuleSNAPSHOTS NOT DIFFERENCES
✓ Each clone is a safety copy
✓ Local branching is free of headaches
✓ Lots of awesome features (stash, rebase, squash, etc...)
Benefits
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
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
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
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
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
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
efc3amaster
HEAD
$ git commit -m “Added README”
SAVING THE SNAPSHOT (COMMIT)
efc3amaster
HEAD
$ git add *.java
ADDING MORE FILES TO THE PICTURE
$ git commit -m “Added Java files”
efc3a
ac2admaster
HEAD
MAKING ANOTHER COMMIT
$ git branch feature/x
efc3a
ac2admaster feature/x
HEAD
BRANCHING (1)
BRANCHING (2)
$ git checkout feature/x
efc3a
ac2admaster feature/x
HEAD
QUICK BRANCHING (1)
efc3a
ac2admaster
HEAD
QUICK BRANCHING (2)
efc3a
ac2admaster feature/x
HEAD
$ git checkout -b feature/x
MERGING (1)
$ git commit -m “Fixed stuff”
efc3a
ac2ad
4ecd4
master
feature/x
HEAD
MERGING (1)
$ git checkout master
efc3a
ac2ad
4ecd4
master
feature/x
HEAD
MERGING (2)
$ git merge feature/x
efc3a
ac2ad
4ecd4
master
feature/x
HEAD
MERGING (3)
efc3a
ac2ad
4ecd4master feature/x
HEAD
Fast-Forward
MERGING (4)
efc3a
ac2ad
4ecd4masterfeature/x
HEAD
f3d3e
Other situation
MERGING (5)
$ git checkout master
efc3a
ac2ad
4ecd4masterfeature/x
HEAD
f3d3e
MERGING (6)
$ git merge feature/x
efc3a
ac2ad
4ecd4
master
feature/x
HEAD
f3d3e
4ecd4
Ugly History
DELETING A BRANCH
$ git branch -d feature/xUgly History
efc3a
ac2ad
4ecd4
master
HEAD
f3d3e
4ecd4
REBASE (1)
efc3a
ac2ad
4ecd4masterfeature/x
HEAD
f3d3e
REBASE (2)
$ git rebase -i master
efc3a
ac2ad
4ecd4master
feature/x
HEAD
2fd3e
f3d3e
MERGING (1)
$ git checkout master
efc3a
ac2ad
4ecd4master
feature/x2fd3eHEAD
Clean History
MERGING (2)
$ git merge feature/x
efc3a
ac2ad
4ecd4
master feature/x2fd3e
HEAD
Fast-Forward
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
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
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 RuleALWAYS MAKE PULL REQUEST ON FENIX
MAVEN
WHAT IS MAVEN?
Golden RuleDEPENDENCIES 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.
MAVEN BUILDING BLOCKS
LIFECYCLESMaven 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.
PLUGINSThe phases by themselves are worthless.We associate plugin goals (implemented by Mojos) to one of the phases.
CLEAN LIFECYCLE
pre-cleanexecute necessary tasks prior to project clean
cleandeletes all files generated during the building process
post-cleanexecutes necessary tasks needed after the building process
pre-clean
clean
post-clean
DEFAULT LIFECYCLE
generate-sources
compile
process-classes
prepare-package
package
install
deploy
24 phasesomitted the most uncommon
generate-sources
compile
process-classes
prepare-package
package
install
deploy
ffmavenplugin
HOW DOES IT WORK?
generate-sources
compile
process-classes
prepare-package
package
install
deploy
maven-compiler-pluginffmavenplugin
HOW DOES IT WORK?
generate-sources
compile
process-classes
prepare-package
package
install
deploy
maven-compiler-pluginffmavenplugin
HOW DOES IT WORK?
generate-sources
compile
process-classes
prepare-package
package
install
deploy
maven-compiler-pluginffmavenplugin
maven-jar-plugin
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
REPOSITORIES
MAVEN CENTRAL REPOSITORYContains most of the commonly known Java libraries (e.g. log4j, hibernate, jodatime, etc...)
DSI NEXUS REPOSITORYContains our binaries (e.g. fenix-framework, tools, bennu, workflow, organization, etc...)
PROXIED THIRD-PARTY REPOSITORIESNexus allows us to proxy and cache some other third-party repositories. Good when they’re out-of-service
INSTALL VS DEPLOY
$ mvn clean install
📁 ~/.m2/repository
$ mvn clean deploy
☁fenix-ashes.ist.utl.pt/nexus