2. Maven Enterprise Stack
Organizations want complete business solutions for their Maven-based software
development.
A complete solutions starts with initiating, or onboarding, developers and ends with
provisioning an application to production.
A Maven-based software development is component-centric. Maven describes components,
creates components, distributes components, and consumes components. Everything in
Maven is about the production, use, and movement of components.
Why?
The ROI is in the first day of use. From the Eclipse onboarding alone.
Sonatype is the organization that understands Maven-based development best
Early adopter save enormously and get to participate in the design of the stack
3. The Evolution of ‘Making Things’
Ad hoc Structure
Text
Ad hoc Automobile Manufacturing Circa 1923 Structured Automobile Manufacturing Circa 2010
1923: 108 independent Automobile Manufacturers in the US Alone
http://en.wikipedia.org/wiki/List_of_defunct_United_States_automobile_manufacturers
4. Maven Central Unique IPs / Month in 2009
700,000
667,708
646,600
588,141
557,734
525,000 514,924 512,165 514,589
502,899
470,237 475,643
362,893
350,000
315,970
Maven is the de facto component
distribution infrastructure for Java projects
175,000 Maven Central is the de facto
store house of all Open Source
Java components: 300M hits/month
0
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 Total Unique IPs: 1,836,709
2009 Total Unique IPs: 3,978,964
5. Maven Enterprise Stack: A complete business
solution for Maven-based development
Developer checks in source code Hudson checks out source code
M2Eclipse 2 SCM 3 Hudson
Binary dependencies
Developer requests binary are delivered to the 4 Hudson instructs Maven
dependencies from Nexus 1 developers workspace to perform the automated build
Nexus 5 Maven
Maven deploys built
Proviso requests updates artifacts to Nexus
to runtime components
from Nexus
6
Nexus sends components
updates to Proviso
Maven Central
Agent
Proviso 7
Agent Agent
Proviso provisions components
to the cloud runtime
8. Maven 3.0
Fully backward compatible: from the CLI perspective Maven 3.0 should be a drop-in
replacement for Maven 2.x
Overhaul for embedding, in particular looking at M2Eclipse, Hudson & Nexus
Plugin API enhancements for incremental builds
Parallel execution
Parallel downloads
Separation of the artifact resolution layer (and eventual integration with P2)
9. Maven 3.0
Fully backward compatible: from the CLI perspective Maven 3.0 should be a drop-in
replacement for Maven 2.x
Overhaul for embedding, in particular looking at M2Eclipse, Hudson & Nexus
Plugin API enhancements for incremental builds
Parallel execution
Parallel downloads
Separation of the artifact resolution layer (and eventual integration with P2)
Maven 3.0-beta-1: Only 3 issues left!
10. Tycho Build
Tycho attempts to be a complete replacement for PDE headless build, Buckminster, and
everything else that attempts to build OSGi bundles and Eclipse plugins in a MANIFEST.MF-
first way.
Tycho already uses Eclipse/OSGi metadata to resolve project dependencies by OSGi rules
and injects these dependencies into maven project model dynamically, at build time.
Tycho uses JDT to make sure modularity rules are applied.
Tycho uses the OSGi state resolver is used to make sure the resolution that occurs during
build-time matches what you will need at runtime.
Tycho supports bundles, fragments, features and update sites, as well as RCP applications.
Tycho knows how to run JUnit test plugins using the OSGi runtime.
Tycho has support for P2 repositories, Update Sites and Maven repositories.
Tycho supports POM-first OSGi bundles.
M2Eclipse has support for importing Tycho projects as Eclipse PDE projects.
16. Hudson for Maven
1.0
Advanced Maven 3.x support
REST integration using Apache Wink
Advanced inter-server communication like Nexus or Hudson with Hudson slaves
Shiro integration to provide the same security infrastructure as
Multi-platform smoke testing: check a canonical build before firing builds on slaves
1.1
Workflow integration for long-lived release processes
Automated build promotion based on long-lived release processes
21. Maven Studio for Eclipse (Commercial)
1.0
Developer onboarding -- Huge! The ROI is the first day used!
Integration with Adobe’s Flex/FlashBuilder
Integration with Polarion’s Subversive to provide enterprise Subversion support
Integration with Hudson through an optimized REST interface Sonatype has created
Integration with Maven Archetype which optimizes creating and managing custom archetypes
Integration with Tomcat for rapid hot re-deploy for accelerated webapp development
Integration with Confluence
Integration with JIRA for time tracking
1.1
Integration with JRebel
Integration with Nexus to be governance & compliance aware from project initialization
Integration with GWT
23. Configuration management
Open Source Ecosystem
Terracotta
Codehaus - bad POMs
- repositories in POMs (bad practice)
- mixed snapshot and release repositories
Apache
- incorrect optional dependencies
One repository
JBoss configuration!
Nexus Group
Dev Unified indices
for m2e
Test
Production
QA Precious
Developers
Corporate Ecosystem
25. Nexus Professional
Maven site support
Maven settings.xml provisioning
Enterprise LDAP integration: multi server support with caching
Eclipse update site & OSGi support
Staging & Promotion
Atlassian Crowd integration
License, compliance and governance support
27. Provisioning Problem
Runtime provisioning solutions are generally created in an ad hoc fashion in much the same way that build
infrastructures are created. Proviso is an attempt to provide structure and patterns for developing, building,
testing, and provisioning runtimes
We need to reason not only about runtimes assembled statically, but we need to be able to modify live
systems. In-situ operation is a requirement.
28. Proviso focuses on Java Runtimes
We are trying to deal with more popular runtimes like Tomcat, Jetty, JBoss, and Equinox
We are not limited to dealing with these specific runtimes, the patterns that we are developing will work for
any Java runtime but we are focusing concretely on the products that we work with an develop first:
Nexus
Hudson
29. No external resource provisioning
No database provisioning (yet)
No database schema changes (yet)
No LDAP provisioning (yet)
31. Recipes
We have tried to stay simple for now and use a Maven POM to describe the constituent BAR, ITARs, and
CARs
We initially tried to make an external format, but we found that a Maven POM was easier in the short term
because we need to integrate the recipes as part of the build. When the BAR, ITARs, and CARs are stated as
normal Maven dependencies then it’s much easier to integrate in a Maven multi-module build
We would ideally like to have an external format (i.e. not a POM) and ultimately we would like to create a
DSL for describing the recipes and some of the constraints for a particular runtime (i.e. the required and
provided capabilities - memory constraints, number of cores...)
We will likely borrow some ideas from Puppet
32. Runtime Assembler
We need to be able to take a recipe and create the runtime. But it’s not as simple as just assembling a bunch
of artifacts, resources and configurations
We need to be able to accommodate making and working with runtimes in a few different scenarios:
Build time assembly
Dynamic run time assembly
During development
Assuming a common ITAR structure which really means a standard binary runtime structure
Assuming a common CAR structure which really means a standard configuration system
Assuming a canonical artifact store which can reliably provide locked down, yet mutable, set of artifacts
33. Eclipse P2 for provisioning
P2 is a very advanced provisioning system Java
P2 is the basis of the update manager in Eclipse since 3.4
P2 is repository type agnostic so we can use P2 for any Java runtime
P2 is very pluggable with concepts of touchpoints and actions
P2 uses SAT4J which is the boolean solver that won the Mancoosi solver competition
The need for a holistic solution providing whole business solutions for Maven-based development. Support from developer onboarding to provisioning software into production.
Trying to lay the ground work in that Maven is the platform upon which we are building. Maven is the dominant choice, strong community and provides the distinct differentiator of creating standards upon which an ecosystem can be built.
- How the parts of the stack link together and communicate
- Show the REST connection
Maven 3
Maven Studio for Eclipse
Nexus
Hudson for Maven
Tycho
- Build, Tools, DM, Server
Hudson