SlideShare a Scribd company logo
1 of 34
Download to read offline
Project Management and Automation
Using Maven and Grunt to accelerate development
Matthew Hanlon •SEAConference •April 7,2014
TEXAS ADVANCED COMPUTING CENTER
Powering Discoveries that Change the World
Introduction
Web and Mobile
Applications
Building tools and applications to make
scientists more productive.
7 Developers (and hiring!)
10+ projects
Liferay
JavaScript
Spring
Restlets
JSR
PHP
Java
Drupal
Portlets
SQL
JSON
XML
jQuery
MySQL Nodejs
PostgreSQL
NoSQL
CakePHP
MongoDB
Python
CodeIgniter
CouchDB
DjangoREST
SOAP
Web services
[ made with: ]https://www.jasondavies.com/wordcloud/
Without process
Boring
What's the big deal?
Too many results in published scientific
papers are not reproducible
The data is unavailable
The environment no longer exists
The code is broken!
Reproducibility in Computer Science
That's only a 20%
success rate!
[ source: ]http://reproducibility.cs.arizona.edu/
Why doesn't the code build?
Missingdependencies
Mysterious configuration parameters
Compile errors
And of course,there is no documentation
How can we fix that?
Automate the boring stuff
Make the rest worth it
Tools for automation
and process
Apache Maven
Grunt.js
Bower
Sass/Compass
Doxygen
Maven
Managing project build, reporting, and documentation.
POM.xml
The Project Object Model
Project
information
Name,version,URL,developers,contributors,licensing,
organization
Build settings Build process,dependencies,non-code resource handling,
reporting
Environment
settings
Source control,repositories,distribution,issue
management
Plugins
Basics: Compiler,Resources,JavaDocs,Eclipse,IntelliJIDEA
Advanced: Exec,Site
Community: Doxygen,Liferay,Jetty
<?xmlversion="1.0"encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.mrhanlon</groupId>
<artifactId>sea2014-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>${cglib.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
$mvninstall
[INFO]Scanningforprojects...
[INFO]
[INFO]Usingthebuilderorg.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder
[INFO]
[INFO]------------------------------------------------------------------------
[INFO]Buildingmodule11.0-SNAPSHOT
[INFO]------------------------------------------------------------------------
[INFO]
[INFO]---maven-clean-plugin:2.5:clean(default-clean)@module1---
[INFO]Deleting/Users/mrhanlon/workspace/github/mrhanlon/sea2014-demo/module1/target
[INFO]
[INFO]---maven-resources-plugin:2.6:resources(default-resources)@module1---
[INFO]Using'UTF-8'encodingtocopyfilteredresources.
[INFO]skipnonexistingresourceDirectory/Users/mrhanlon/workspace/github/mrhanlon/sea2014-demo/module1/
[INFO]
[INFO]---maven-compiler-plugin:2.0.2:compile(default-compile)@module1---
[INFO]Compiling1sourcefileto/Users/mrhanlon/workspace/github/mrhanlon/sea2014-demo/module1/target/cl
[INFO]
[INFO]---maven-resources-plugin:2.6:testResources(default-testResources)@module1---
[INFO]Using'UTF-8'encodingtocopyfilteredresources.
[INFO]skipnonexistingresourceDirectory/Users/mrhanlon/workspace/github/mrhanlon/sea2014-demo/module1/
[INFO]
[INFO]---maven-compiler-plugin:2.0.2:testCompile(default-testCompile)@module1---
[INFO]Compiling1sourcefileto/Users/mrhanlon/workspace/github/mrhanlon/sea2014-demo/module1/target/te
[INFO]
[INFO]---maven-surefire-plugin:2.12.4:test(default-test)@module1---
[INFO]Surefirereportdirectory:/Users/mrhanlon/workspace/github/mrhanlon/sea2014-demo/module1/target/su
-------------------------------------------------------
TESTS
-------------------------------------------------------
Runningcom.github.mrhanlon.AppTest
Testsrun:1,Failures:0,Errors:0,Skipped:0,Timeelapsed:0.035sec
Results:
Testsrun:1,Failures:0,Errors:0,Skipped:0
Grunt
The JavaScript Task Runner
(It's not just for JavaScript!)
Gruntfile.js
Declarative JSON/JavaScript configuration file
Executes tasks in Node.js runtime
Loads of community plugins:
jslint/jshint
file tasks
watch
compass
library/framework support
'usestrict';
module.exports=function(grunt){
//Projectconfiguration.
grunt.initConfig({
//Metadata.
pkg:grunt.file.readJSON('tiny-pubsub.jquery.json'),
banner:'/*!<%=pkg.title||pkg.name%>-v<%=pkg.version%>-'+
'<%=grunt.template.today("yyyy-mm-dd")%>n'+
'<%=pkg.homepage?"*"+pkg.homepage+"n":""%>'+
'*Copyright(c)<%=grunt.template.today("yyyy")%><%=pkg.author.name%>;'+
'Licensed<%=_.pluck(pkg.licenses,"type").join(",")%>*/n',
//Taskconfiguration.
clean:{
src:['dist']
},
concat:{
options:{
banner:'<%=banner%>',
stripBanners:true
},
dist:{
src:['src/<%=pkg.name%>.js'],
dest:'dist/ba-<%=pkg.name%>.js'
},
},
uglify:{
options:{
banner:'<%=banner%>'
},
dist:{
src:'<%=concat.dist.dest%>',
dest:'dist/ba-<%=pkg.name%>.min.js'
},
},
qunit:{
files:['test/**/*.html']
},
jshint:{
$grunt
Running"jshint:gruntfile"(jshint)task
>>1filelintfree.
Running"jshint:src"(jshint)task
>>1filelintfree.
Running"jshint:test"(jshint)task
>>1filelintfree.
Running"qunit:files"(qunit)task
Testingtest/tiny-pubsub.html....OK
>>4assertionspassed(23ms)
Running"clean:files"(clean)task
Cleaning"dist"...OK
Running"concat:dist"(concat)task
File"dist/ba-tiny-pubsub.js"created.
Running"uglify:dist"(uglify)task
File"dist/ba-tiny-pubsub.min.js"created.
Uncompressedsize:389bytes.
Compressedsize:119bytesgzipped(185bytesminified).
Done,withouterrors.
$_
BowerFront-end package management
package agnostic
runs over git
Declarative JSON configuration
{
"name":"vislab-reservation-portlet",
"version":"1.0.0",
"dependencies":{
"modernizr":"~2.6.2",
"jqueryui-timepicker-addon":"1.4.3",
"mustache":"~0.8.1",
"datejs":"*",
"fullcalendar":"~1.6.4"
}
}
Sass/Compass
"Expressive" CSS
@mixinbox-sizing($bs){
$bs:unquote($bs);
@includeexperimental(box-sizing,$bs,
-moz,-webkit,not-o,not-ms,not-khtml,official
);
}
*{
@includebox-sizing(border-box);
}
.alert{
border:1pxsolidblack;
}
.alert-error{
@extend.alert;
color:red;
border-color:red;
}
Doxygen
Generating documentation for annotated sources
Tons of language support
Extensions for other languages
(like JavaScript!)
Demo
So what's next?
Get up and running in minutes
$>gitclone<repourl>my-dev-env
$>cdmy-dev-env
$>gitsubmoduleinit
$>gitsubmoduleupdate
$>mvninstall
$>mvnliferay:deploy
The Second Law of Thermodynamics
The entropy of an isolated system never decreases,
because isolated systems always evolve toward
thermodynamic equilibrium a state with maximum
entropy.
Fin.
@mattorantimatt
mrhanlon@tacc.utexas.edu
TEXAS ADVANCED COMPUTING CENTER
Powering Discoveries that Change the World

More Related Content

Similar to Project Management and Automation: Using Maven and Grunt to accelerate development

Netbeans65 Osum Slides
Netbeans65 Osum SlidesNetbeans65 Osum Slides
Netbeans65 Osum Slides
Abhishek Gupta
 
Designing and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps PlatformDesigning and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps Platform
Apigee | Google Cloud
 

Similar to Project Management and Automation: Using Maven and Grunt to accelerate development (20)

MANJARI RASTOGI_CV_ex
MANJARI RASTOGI_CV_exMANJARI RASTOGI_CV_ex
MANJARI RASTOGI_CV_ex
 
DevOps Hiring
DevOps HiringDevOps Hiring
DevOps Hiring
 
Netbeans65 Osum Slides
Netbeans65 Osum SlidesNetbeans65 Osum Slides
Netbeans65 Osum Slides
 
H2O Deep Water - Making Deep Learning Accessible to Everyone
H2O Deep Water - Making Deep Learning Accessible to EveryoneH2O Deep Water - Making Deep Learning Accessible to Everyone
H2O Deep Water - Making Deep Learning Accessible to Everyone
 
Make Web, Not War - Building Interoperable Web Apps with PHP, PHP Quebec
Make Web, Not War  - Building Interoperable Web Apps with PHP, PHP QuebecMake Web, Not War  - Building Interoperable Web Apps with PHP, PHP Quebec
Make Web, Not War - Building Interoperable Web Apps with PHP, PHP Quebec
 
Jose_Casorla_resume
Jose_Casorla_resumeJose_Casorla_resume
Jose_Casorla_resume
 
Chaitrali_Resume
Chaitrali_ResumeChaitrali_Resume
Chaitrali_Resume
 
Resume 2016-12-23 f
Resume 2016-12-23 fResume 2016-12-23 f
Resume 2016-12-23 f
 
Ajax Abuse Todcon2008
Ajax Abuse Todcon2008Ajax Abuse Todcon2008
Ajax Abuse Todcon2008
 
How CSBP Turbocharged Its Enterprise Job Scheduling Capability
How CSBP Turbocharged Its Enterprise Job Scheduling CapabilityHow CSBP Turbocharged Its Enterprise Job Scheduling Capability
How CSBP Turbocharged Its Enterprise Job Scheduling Capability
 
Modern Application Development v1-0
Modern Application Development  v1-0Modern Application Development  v1-0
Modern Application Development v1-0
 
Why I've Not bothered With Drupal 8
Why I've Not bothered With Drupal 8Why I've Not bothered With Drupal 8
Why I've Not bothered With Drupal 8
 
Tools and technics
Tools and technicsTools and technics
Tools and technics
 
SAIGANESH CHINTALA_JAVA
SAIGANESH CHINTALA_JAVASAIGANESH CHINTALA_JAVA
SAIGANESH CHINTALA_JAVA
 
Introduction to Web Frameworks
Introduction to Web FrameworksIntroduction to Web Frameworks
Introduction to Web Frameworks
 
Designing and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps PlatformDesigning and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps Platform
 
Tapan Nayan Banker Background and details
Tapan Nayan Banker Background and detailsTapan Nayan Banker Background and details
Tapan Nayan Banker Background and details
 
NetBeans 6.5
NetBeans 6.5NetBeans 6.5
NetBeans 6.5
 
Dean4j@Njug5
Dean4j@Njug5Dean4j@Njug5
Dean4j@Njug5
 
.Net training in Bhubaneswar
.Net training in Bhubaneswar.Net training in Bhubaneswar
.Net training in Bhubaneswar
 

Recently uploaded

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Recently uploaded (20)

%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 

Project Management and Automation: Using Maven and Grunt to accelerate development