SlideShare a Scribd company logo
Build Lifecycle
Craftsmanship
at the Transylvania JUG
by Matthew McCullough
Matthew McCullough
@matthewmccull
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Gradle ➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
Probably
the most important
technical book
of 2010
-Martin Fowler, ThoughtWorks
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡Maven 3
http://maven.apache.org/
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Why not stay with it?
➡What’s new?
Maven 2.x?
➡Performance
➡Memory footprint
➡Parallelism
Maven 3.x
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡Gradle
http://gradle.org/
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Groovy DSL
➡Customizable lifecycle
➡Suitable for build masters and users
Better Build Tool
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡Jenkins
http://jenkins-ci.org/
Build Lifecycle Craftsmanship for the Transylvania JUG
it all started with...
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
and now the space is crowded...
Software tools for continuous integration include:
■AnthillPro — continuous integration server by Urbancode
■Apache Continuum — continuous integration server
supporting Apache Maven and Apache Ant. Supports
CVS, Subversion, Ant, Maven, and shell scripts
■Apache Gump — continuous integration tool by Apache
■Automated Build Studio — proprietary automated build,
continuous integration and release management system
by AutomatedQA
■Bamboo — proprietary continuous integration server by
Atlassian Software Systems
■BuildBot — Python/Twisted-based continuous build
system
■BuildMaster — proprietary application lifecycle
management and continuous integration tool by Inedo
NAnt, Maven, and shell scripts
■Software Configuration and Library Manager — software
configuration management system for z/OS by IBM
Rational Software
■QuickBuild - proprietary continuous integration server
with free community edition featuring build life cycle
management and pre-commit verification.
■TeamCity — proprietary continuous-integration server by
JetBrains with free professional edition
■Team Foundation Server — proprietary continuous
integration server and source code repository by
Microsoft
■Tinderbox — Mozilla-based product written in Perl
■Rational Team Concert — proprietary software
development collaboration platform with built-in build
engine by IBM including Rational Build Forge
➡Humans should do the intelligent work
➡Integrate with source code, metrics
Continuous Integration
473 plugins
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡Sonar
http://sonarsource.org/
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
➡For managers?
Metrics
★Checkstyle
★PMD
★ Findbugs
★ Cobertura
★ Emma
★ Clirr
★ JaCoCo
★ Useless Code
★ SQALE
★ 20+ others...
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
#Maven 2 or 3
mvn sonar:sonar
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡BTrace
http://kenai.com/projects/btrace
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Bytecode, class manipulation
➡Aspect-like adjustment at runtime
Runtime Inspection
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.AnyType;
import java.lang.management.MemoryUsage;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Map;
@BTrace public class TraceAllMethodCalls {
/**
* METHOD CALL TRACEPOINT.
*/
@OnMethod(
clazz="com.ambientideas.HelloWorldJava",
method="print",
location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/")
)
public static void m(AnyType[] args) {
//System.out.println("Hello");
println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ",
name(probeClass())));
println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod()));
}
@OnMethod(
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Map;
@BTrace public class TraceAllMethodCalls {
/**
* METHOD CALL TRACEPOINT.
*/
@OnMethod(
clazz="com.ambientideas.HelloWorldJava",
method="print",
location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/")
)
public static void m(AnyType[] args) {
//System.out.println("Hello");
println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ",
name(probeClass())));
println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod()));
}
@OnMethod(
clazz="/.*/",
method="println"
)
public static void m2(AnyType[] args) {
println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ",
name(probeClass())));
println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod()));
}
/**
public static void m(AnyType[] args) {
//System.out.println("Hello");
println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ",
name(probeClass())));
println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod()));
}
@OnMethod(
clazz="/.*/",
method="println"
)
public static void m2(AnyType[] args) {
println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ",
name(probeClass())));
println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod()));
}
/**
* ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT).
*/
@OnExit
public static void onexit(int code) {
println("****** THE BTRACE PROGRAM IS EXITING.");
}
/**
* LOW MEMORY TRACE POINT.
*/
@OnLowMemory(
pool = "Tenured Gen",
println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ",
name(probeClass())));
println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod()));
}
/**
* ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT).
*/
@OnExit
public static void onexit(int code) {
println("****** THE BTRACE PROGRAM IS EXITING.");
}
/**
* LOW MEMORY TRACE POINT.
*/
@OnLowMemory(
pool = "Tenured Gen",
threshold=58720250
)
public static void onLowMem(MemoryUsage mu) {
println("******");
println(mu);
}
/**
* MEMORY HISTOGRAM TRACE POINT.
*/
private static Map<String, AtomicInteger> histo = newHashMap();
* ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT).
*/
@OnExit
public static void onexit(int code) {
println("****** THE BTRACE PROGRAM IS EXITING.");
}
/**
* LOW MEMORY TRACE POINT.
*/
@OnLowMemory(
pool = "Tenured Gen",
threshold=58720250
)
public static void onLowMem(MemoryUsage mu) {
println("******");
println(mu);
}
/**
* MEMORY HISTOGRAM TRACE POINT.
*/
private static Map<String, AtomicInteger> histo = newHashMap();
@OnTimer(4000)
public static void print() {
if (size(histo) != 0) {
printNumberMap(strcat("******", "Component Histogram"), histo);
}
}
}
*/
@OnLowMemory(
pool = "Tenured Gen",
threshold=58720250
)
public static void onLowMem(MemoryUsage mu) {
println("******");
println(mu);
}
/**
* MEMORY HISTOGRAM TRACE POINT.
*/
private static Map<String, AtomicInteger> histo = newHashMap();
@OnTimer(4000)
public static void print() {
if (size(histo) != 0) {
printNumberMap(strcat("******", "Component Histogram"), histo);
}
}
}
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Gradle
➡Jenkins
➡Sonar
➡Maven 3
➡VisualVM
➡BTrace
➡VisualVM
http://visualvm.java.net/
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
➡Java 1.4 through Java 7 support
➡Included in JDK 6u7 >
Virtual Machine Metrics
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle
Craftsmanship
at the Transylvania JUG
by Matthew McCullough

More Related Content

PDF
Vagrant勉強会 チュートリアル編
PDF
vagrant-php
PPTX
Windows Azure loves OSS
PDF
Web ブラウザで DRM
PDF
Node básico para front end developers
PDF
Kettunen, miaubiz fuzzing at scale and in style
PDF
Security of Go Modules and Vulnerability Scanning in GoCenter and VS Code
PDF
Security of Go Modules and Vulnerability Scanning in Go Center
Vagrant勉強会 チュートリアル編
vagrant-php
Windows Azure loves OSS
Web ブラウザで DRM
Node básico para front end developers
Kettunen, miaubiz fuzzing at scale and in style
Security of Go Modules and Vulnerability Scanning in GoCenter and VS Code
Security of Go Modules and Vulnerability Scanning in Go Center

What's hot (18)

PDF
Openstack Vagrant plugin overview
PDF
Hacking Lab con ProxMox e Metasploitable
PDF
톰캣 #04-환경설정
PPTX
Vulpes tribes backend
PDF
Velocity 2011 - Our first DDoS attack
PDF
The true story_of_hello_world
PDF
Setup a New Virtualenv for Django in Windows
DOCX
Run Docker On Windows Using Vagrant
PDF
Follow the White Rabbit: Simplifying Fuzz Testing Using FuzzExMachina
PDF
Groovy on the shell
PPTX
Python+anaconda Development Environment
PDF
Androidの本当にあった怖い話
PDF
Linux & Open Source - Alternative Software
PDF
Ignite talks - 自動化的關鍵
PDF
GroovyFX - groove JavaFX Gr8Conf EU 2017
PDF
톰캣 #05-배치
PPTX
Up And Running With Web VR Fall 2014
Openstack Vagrant plugin overview
Hacking Lab con ProxMox e Metasploitable
톰캣 #04-환경설정
Vulpes tribes backend
Velocity 2011 - Our first DDoS attack
The true story_of_hello_world
Setup a New Virtualenv for Django in Windows
Run Docker On Windows Using Vagrant
Follow the White Rabbit: Simplifying Fuzz Testing Using FuzzExMachina
Groovy on the shell
Python+anaconda Development Environment
Androidの本当にあった怖い話
Linux & Open Source - Alternative Software
Ignite talks - 自動化的關鍵
GroovyFX - groove JavaFX Gr8Conf EU 2017
톰캣 #05-배치
Up And Running With Web VR Fall 2014
Ad

Similar to Build Lifecycle Craftsmanship for the Transylvania JUG (20)

PPTX
Monitoring distributed (micro-)services
PDF
Profiling your Java Application
PDF
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
PDF
Dynamic Guice Applications
PDF
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
KEY
Практики применения JRuby
KEY
JavaOne 2012 - JVM JIT for Dummies
PPT
Oracle Workflow Continuous Integration
PDF
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
PDF
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
PDF
Invoke dynamic your api to hotspot
PDF
Debugging Your Production JVM
PDF
A toolbox for statical analysis and transformation of OSGi bundles
PDF
JDK Tools For Performance Diagnostics
PDF
BMO - Intelligent Projects with Maven
PDF
Chronicler: Lightweight Recording to Reproduce Field Failures (Presented at I...
PDF
Intelligent Projects with Maven - DevFest Istanbul
PDF
Micronaut Deep Dive - Devnexus 2019
PDF
Soft shake 2013 - make use of sonar on your mobile developments
PDF
Micronaut: Evolving Java for the Microservices and Serverless Era
Monitoring distributed (micro-)services
Profiling your Java Application
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
Dynamic Guice Applications
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
Практики применения JRuby
JavaOne 2012 - JVM JIT for Dummies
Oracle Workflow Continuous Integration
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
Invoke dynamic your api to hotspot
Debugging Your Production JVM
A toolbox for statical analysis and transformation of OSGi bundles
JDK Tools For Performance Diagnostics
BMO - Intelligent Projects with Maven
Chronicler: Lightweight Recording to Reproduce Field Failures (Presented at I...
Intelligent Projects with Maven - DevFest Istanbul
Micronaut Deep Dive - Devnexus 2019
Soft shake 2013 - make use of sonar on your mobile developments
Micronaut: Evolving Java for the Microservices and Serverless Era
Ad

More from Matthew McCullough (20)

PDF
Using Git and GitHub Effectively at Emerge Interactive
PDF
All About GitHub Pull Requests
PDF
Adam Smith Builds an App
PDF
Git's Filter Branch Command
PDF
Git Graphs, Hashes, and Compression, Oh My
PDF
Git and GitHub at the San Francisco JUG
PDF
Finding Things in Git
PDF
Git and GitHub for RallyOn
PDF
Migrating from Subversion to Git and GitHub
PDF
Git Notes and GitHub
PDF
Intro to Git and GitHub
PDF
Git Going for the Transylvania JUG
PDF
Transylvania JUG Pre-Meeting Announcements
PDF
Game Theory for Software Developers at the Boulder JUG
PDF
Cascading Through Hadoop for the Boulder JUG
PDF
JQuery Mobile
PDF
R Data Analysis Software
PDF
Please, Stop Using Git
PDF
Dr. Strangedev
PDF
Jenkins for One
Using Git and GitHub Effectively at Emerge Interactive
All About GitHub Pull Requests
Adam Smith Builds an App
Git's Filter Branch Command
Git Graphs, Hashes, and Compression, Oh My
Git and GitHub at the San Francisco JUG
Finding Things in Git
Git and GitHub for RallyOn
Migrating from Subversion to Git and GitHub
Git Notes and GitHub
Intro to Git and GitHub
Git Going for the Transylvania JUG
Transylvania JUG Pre-Meeting Announcements
Game Theory for Software Developers at the Boulder JUG
Cascading Through Hadoop for the Boulder JUG
JQuery Mobile
R Data Analysis Software
Please, Stop Using Git
Dr. Strangedev
Jenkins for One

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Cloud computing and distributed systems.
PDF
KodekX | Application Modernization Development
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Approach and Philosophy of On baking technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Chapter 3 Spatial Domain Image Processing.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
NewMind AI Weekly Chronicles - August'25 Week I
“AI and Expert System Decision Support & Business Intelligence Systems”
Cloud computing and distributed systems.
KodekX | Application Modernization Development
Network Security Unit 5.pdf for BCA BBA.
Building Integrated photovoltaic BIPV_UPV.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Approach and Philosophy of On baking technology
Advanced methodologies resolving dimensionality complications for autism neur...
Understanding_Digital_Forensics_Presentation.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Per capita expenditure prediction using model stacking based on satellite ima...
Reach Out and Touch Someone: Haptics and Empathic Computing

Build Lifecycle Craftsmanship for the Transylvania JUG