LDSTech Maven and Stack Starter

pityingmushroomInternet and Web Development

Aug 7, 2012 (5 years and 10 days ago)

492 views

Maven and Stack Starter

Michael Youngstrom

Notes


This is a training
NOT

a presentation


Please ask questions


Prerequisites


Introduction to Java Stack


Intermediate Maven


Basic Java and XML skillz

Overview

Understand Maven configuration in “Stack Project”



Review Intermediate Maven


Useful Maven
Plugins


Stack Master


Review Stack Starter


Stack Starter Template


Template Modules

Review


Maven Plugin Execution


Maven Plugin Configuration


Maven Properties


Maven Plugin Configuration with Properties


Maven Profiles

Useful Maven Plugins


Maven has numerous plugins


Apache Maven Community:


http://maven.apache.org/plugins


Codehaus Community:


http://mojo.codehaus.org/plugins.html


LDSTech (Java Stack) Plugins:


http://code.lds.org/maven
-
sites/stack/


Not finding what you need? Try searching:


{some product} maven plugin

Useful 1
st

Party Plugins (Build)


Java Compiler
Plugin


Actually compiles Java code and tests


Resources
Plugin


Processes resources and test
-
resources


AntRun

Plugin


Executes an embedded Ant script


Useful for quickly hacking a
Plugin


RequireJS

Example


Shade
Plugin


Generates an
Uber
-
JAR of current project and
dependencies

Useful 1
st

Party Plugins (Packaging)


Jar
Plugin


Creates a jar file


Specify MANIFEST.MF values


War
Plugin


Packages a web application in to a .war file


Can Merge .war files


Filter web resources


Ear
Plugin


Packages artifacts into an .ear file


Automatically generates application.xml



Useful 1
st

Party Plugins (Testing)


Surefire is for Unit Testing


Executes in the “test” phase


Test results are processed after executed


Test file pattern:


**/*
Test.java


**/Test*.java


**/*
TestCase.java


Failsafe is for Integration Testing


Tests execute in the “integration
-
test” phase


Test results are processed in the “verify” phase


Test file pattern:


**/IT*.java


**/*
IT.java


**/*
ITCase.java


Only supports
TestNG

or
Junit

4 (not both) in same module

Useful 1
st

Party Plugins (Documentation)


Javadoc

Plugin


Builds and packages project
Javadocs


Source
Plugin


Builds and packages source code of project


Plugin

Plugin


Builds Maven
Plugins


Builds Reference Documentation


Site
Plugin


Builds Reference site for project


Javadocs


Browsable

Sources (
jxr
)


Test Results


Maven Docs

Useful 3
rd

Party Plugins (Build)


GWT Plugin


Compiles a GWT application


Runs GWTTestCases


JSPC Plugin


Compiles .jsp files


Useful for finding syntax errors


Useful 3
rd

Party Plugins (Misc)


Wagon
Plugin


Uploads and Downloads file


Exec
Plugin


Execute a native or Java application


Webstart

Plugin


Numerous
WebStart

oriented utilities


Signing


Jnlp

file Generation


TagLib

Plugin


Generates JSP
Taglib

Documentation


LDSTech Plugins (Deploy)


Tomcat
Plugin


Packages a Tomcat “Deployable”


Configure and deploy “Vanilla” Tomcat


T
-
Cat
Plugin


Deploys to a T
-
Cat managed instance


Websphere

Plugin


Packages a
Webphere

“Deployable”


Deploys to
Websphere

instance using Middleware deploy
scripts


WAM
Plugin


Wraps execution of WAM Emulator


Can deploy to remote server


Can execute
wam
-
config

packaged in a jar dependency

LDSTech Plugins (Misc)


DB Migrator Plugin


Helps a team manage DB Schema changes


Packages migrations for future execution


Execute migrations as part of a build


Pseudo i18n Plugin


Generates pseudo translations of properties files

Lab 1: Useful Plugins

https://tech.lds.org/wiki/Maven_and_Stack_Starte
r#Lab_1_Useful_Plugins

Stack Master


Organizational Parent POM


The definition of a “Stack Application”


Configuration Extensions


Manages Dependencies


Doesn’t include only manages


Manages
Plugins


Doesn’t execute only manages


Extends stack
-
thirdparty


Implementation Detail

Configuration Extensions


Support for Binary Resources


/src/main/binary


/src/test/binary


Resource directory for I18n


/src/main/bundles


Encoding


UTF
-
8 Everywhere we can

Dependencies


Uses Dependency Management


Allows libraries to be upgraded with a “Stack Upgrade”


Includes all Stack and major
thirdparty

libraries


Tested and verified to work correctly together


Provides appropriate exclusions


Java 6


Fixing
thirdparty

“optional” dependencies


All dependencies have version property


Allows upgrade or downgrade without redefinition

<properties>


<
springVersion
>3.0.5.RELEASE</
springVersion
>


...

</properties>


Discovering Managed Dependencies


Use Tools


CTRL+click on stack
-
master


Effective POM


View Dependency Management Report


http://code.lds.org/maven
-
sites/stack/modules/master/{Version}/dependency
-
management.html


View file in local repository


Many more

Plugins


Specify version of many plugins


Including Dependencies


Allow us to upgrade plugins with Stack Releases


Some Default configuration and executions


All plugins have a version property

Default Plugin Configuration


Compiler & JSPC
plugin

set to Java 6


Add default meta data to MANIFEST.MF


Project Maven Information


Build
-
Revision


Build
-
Url


Build
-
Date


Stack
-
Version


FailSafe

Plugin


Ignore Test failures by default (independent of Surefire)


Created “
itGroups
” property (independent of Surefire)


Lab 2: Stack Master

https://tech.lds.org/wiki/Maven_and_Stack_Starte
r#Lab_2_Stack_Master

Stack Starter Review


Stack Starter is a templating application


Produces a preconfigured project:


Fully functional


Uses supported tools


Can provides a simple demo


The generated application is yours to evolve


“Stack” upgrades simply update tool versions not
configuration

Modules in Stack Starter


Multi Module project


parent


web


ear (Websphere)


deploy


wam


qa


db


api

Parent Module


Holds most build configuration


Easier to see configuration in one place


Defines Maven repositories (internal or external)


Prefer using
plugin

expression configuration


Easier to create profiles


Supports configuration using command line


The
deploy*

properties unify deployment
config


App Server


WAM


Embedded


Stack Starter Profiles


Stack Starter uses profiles to represent “usage
scenarios”


Deployment Mode (local, embedded, remote)


App Server
Config


Test
Execusion

Config


DB Migration
Config


Wam

Config


Dev is the default scenario


Continuous focuses on continuous build
config

Web Module


The heart and soul of a “stack application”


Produces project .war file


Uses maven
-
war
-
plugin for .war packaging


Runs Unit and Integration Tests as part of build


Supports Spring integration testing framework


Only support Junit 3.x and TestNG (No Junit 4)

Deploy Module


Owns application server configuration


Produces .zip artifact combining
config

and war(s) or an ear


Tomcat Deploy


Uses packaging “tomcat
-
deployable”


Uses stack
-
tomcat
-
maven
-
plugin


Requires 1
-
* war dependencies


Configuration in /
src
/main/resources


Websphere

Deploy


Uses packaging “was
-
deployable”


Uses stack
-
was
-
maven
-
plugin


Requires an ear dependency


Configuration in /
src
/main/resources


Will execute a deployment if enabled

Wam Module


Manages WAM Emulator


Uses stack
-
wam
-
maven
-
plugin


Allows Wam configuration to change based on profile


Simplified launching


Config is in /src/main/resources


Will remote deploy wam emulator if enabled


Produces jar artifact for wam config reuse


See QA Module

QA Module


Enables black box in container testing


Executes tests against a running container:


Selenium based UI Tests


Spring based Web Service Tests


Etc


Produces jar containing tests


Stay Tuned!


Supports Embedded Deployment

Stack Starter Deployment


Typically Deployment is out of process


Sometimes requires pre installed Server (
Websphere
)


Embedded Deployment is in process


Servers are bound to Maven build process


Allows setup and teardown of Servers as part of module
build


QA module supports Embedded Deployment for
Tomcat


Tomcat and
Wam

launched in
pre
-
integration
-
test


Tomcat and
Wam

terminated in
post
-
integration
-
test


Enabled by default in “dev” profile

DB Module


Manages DB Migration Tool


Uses stack
-
db
-
maven
-
plugin:


packaging type “stack
-
db
-
migrator”


Produces .zip artifact


Capable of executing DB Migrations without Maven


Will execute db migration in pre
-
integration
-
test
phase


Enabled by default


API Module


Created when using Web Service template


We’ll cover api more when doing Web Service
training

Demo

Stack Starter Maven Config Tour

Lab 3: Maven Profiles

https://tech.lds.org/wiki/Maven_and_Stack_Starte
r#Lab_3_Stack_Starter

Summary


Maven has a number of useful plugins


Use of Stack Master is the definition of a “Stack
Application”


Stack Starter provides a way to use stack tools


Supports Black Box Testing


Supports remote and embedded deployment