SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
WTF is Takari?
Jason van Zyl
http://takari.io
@takari_io
Agenda

‣
‣
‣
‣
‣

Incremental build
Aggressive parallelization
Generations
Polyglot for Maven
Shell
It’s too hard for organizations
to efficiently deliver
JVM-based software
The problem with delivery
What is an application and how do you reason about it? Why you might be here today?

External Services

Internal Components

3rd Party Components

Configuration

Machine

v1.0
Software Delivery Chain
Developer checks code into the SCM

IDE

Developer requests components
from Repoman and the components
are delivered to the developer

2

CI checks code out of the SCM

SCM

CI

3

CI instructs build tool to
perform a build

4

1

Repository

Central

Build

5

Build tool deploys components
to repository manager
Provisioning system requests components
and configuration from Nexus.

6

Provisioner

7

Agent

Provisioning system provisions apps and
components to the agents
managing runtimes

Agent

Agent
Agenda

‣
‣
‣
‣
‣

Incremental build
Aggressive parallelization
Generations
Polyglot for Maven
Shell
Incremental build
Incremental build
We’ve supported incremental build in m2eclipse for quite a while

‣
‣
‣
‣

m2eclipse is capable of operating on a single resource with a single Mojo call -- very efficient
We implemented incremental build for Maven on the CLI
We implemented a custom Guice scope for Maven’s core to @Inject what we call a BuildContext
We Implemented versions the Mojos for the standard lifecycle including and incremental CLI compiler based
on Eclipse JDT
public class BuildAvoidanceDemo {
private final BuildContext context;
private final File inputDir;
private final File outputDir;
private final Set<String> includes;
private final Set<String> excludes;
//
//
//
//
//
//

performed automatically by the framework
1.
2.
3.
4.

delete all stale or orphaned output files produced during previous build(s)
persist BuildContext state such that it can be used during the next build
replay any messages not cleared from previous build(s)
raise build error if any of the inputs processed in this or previous builds had SEVERITY_ERROR message

@Inject
public BuildAvoidanceDemo(BuildContext context, File inputDir, Set<String> includes, Set<String> excludes, File outputDir) {
this.context = context;
this.inputDir = inputDir;
this.includes = includes;
this.excludes = excludes;
this.outputDir = outputDir;
}
public void execute() throws IOException {
// determine all input files, regardless of their up-to-date status
// in this particular case use basedir with ant-style includes/excludes patterns
FileSet inputs = new FileSetBuilder(inputDir).addIncludes(includes).addExcludes(excludes).build();
// context.registerInputs registers specified inputs FileSets with the build context, which is necessary to
// enable cleanup of stale outputs. it returns collection of input files that require processing
for (File inputFile : context.registerInputs(inputs)) {
// context.addProcessedInput marks beginning of processing of the input file
// it clears all output files and messages associated with the input file for this build
context.addProcessedInput(inputFile);
// mapping between input and output files is outside of scope of BuildContext API
File outputFile = determineOuputFile(outputDir, inputFile);
// context.newOutputStream associates input and output files, which is necessary to determine input files
// that require processing and to perform cleanup of stale output files.
OutputStream os = context.newOutputStream(inputFile, outputFile);
try {
// generation of output file contents is outside of scope of BuildContext API
// likewise, Message object, if any, is application specific and is not part of BuildContext API
Collection<Message> messages = generateOutput(inputFile, os);

}

}

}

// record error and warning messages generated during input file processing
for (Message message : messages) {
context.addMessage(inputFile, message.getLine(), message.getColumn(), message.getText(), BuildContext.SEVERITY_ERROR, null);
}
} finally {
os.close();
}
Aggressive parallelization
Existing parallel mode

Upstream
Aggressive parallel mode

Upstream
Aggressive parallel mode
with smart scheduling

Upstream
Aggressive parallel mode
with smart scheduling

Build Telemetry
Critical path
Generations & Workspaces
SCM

revision 100:branch X

Generation 100
SCM

SCM

SCM

SCM

revision 100:branch X

revision 101:branch X

revision 102:branch X

revision 103:branch X

Generation 100

Generation 101

Generation 102

Generation 103

As time passes and your product gets better (I hope)
Workspaces
How does a workspace relate to a generation?
provisio-webserver
javax.inject
jetty-server
javax.servlet
jetty-continuation
jetty-http
jetty-io
jetty-util
jetty-webapp
jetty-xml
jetty-util
jetty-deploy
jetty-webapp
jetty-util
jetty-jmx
jetty-util
jetty-util
What if generations were supported across the delivery chain?

IDE

2

SCM

CI

3

4

1

Consuming a new generation
Repository

Build

5

Producing a new generation
6

Provisioner

7

Agent
Agent

Agent
Generations collaboration between build and repository manager
Polyglot for Maven
Polyglot for Maven
Maven can support different formats and even DSLs

‣

A lot of work has been done recently on the Ruby and Scala DSLs, but there is support for Groovy, Atom,
YAML, and Clojure as well

‣
‣

We cut the 0.9.0 release yesterday and it’s available to try
The code and instructions are available at https://github.com/tesla/tesla-polyglot
project 'Polyglot Tesla :: Aggregator' do
model_version '4.0.0'
id 'io.tesla.polyglot:tesla-polyglot:0.0.1-SNAPSHOT'
inherit 'io.tesla:tesla:4'
packaging 'pom'
properties( 'sisuInjectVersion' => '0.0.0.M2a',
'teslaVersion' => '3.1.0' )
modules [ 'tesla-polyglot-common',
'tesla-polyglot-atom',
'tesla-polyglot-ruby',
'tesla-polyglot-groovy',
'tesla-polyglot-yaml',
'tesla-polyglot-clojure',
'tesla-polyglot-scala',
'tesla-polyglot-cli',
'tesla-polyglot-maven-plugin' ]
overrides do
jar 'org.eclipse.sisu:org.eclipse.sisu.inject:${sisuInjectVersion}'
jar 'org.eclipse.sisu:org.eclipse.sisu.plexus:${sisuInjectVersion}'
jar 'org.apache.maven:maven-model-builder:3.1.0'
jar 'org.apache.maven:maven-embedder:3.1.0'
jar( 'junit:junit:4.11', :scope => 'test' )
end
plugin 'org.codehaus.plexus:plexus-component-metadata:1.5.4' do
execute_goals 'generate-metadata', 'generate-test-metadata'
end
build do
execute("first", :validate) do |context|
puts "Hello from JRuby!"
end
end
end
project {
modelVersion '4.0.0'
parent('io.tesla:tesla:4')
groupId 'io.tesla.polyglot'
artifactId 'tesla-polyglot'
version '0.0.1-SNAPSHOT'
packaging 'pom'
name 'Polyglot Tesla :: Aggregator'
modules([
'tesla-polyglot-common',
'tesla-polyglot-atom',
'tesla-polyglot-ruby',
'tesla-polyglot-groovy',
'tesla-polyglot-yaml',
'tesla-polyglot-clojure',
'tesla-polyglot-scala',
'tesla-polyglot-cli',
'tesla-polyglot-maven-plugin',
])
properties {
sisuInjectVersion '0.0.0.M2a'
teslaVersion '3.1.0'
}
dependencyManagement {
dependencies {
dependency('org.eclipse.sisu:org.eclipse.sisu.inject:${sisuInjectVersion}')
dependency('org.eclipse.sisu:org.eclipse.sisu.plexus:${sisuInjectVersion}')
dependency('org.apache.maven:maven-model-builder:3.1.0')
dependency('org.apache.maven:maven-embedder:3.1.0')
dependency('junit:junit:4.11:test')
}
}
build {
$execute(id: 'hello', phase: 'validate') {
println ""
println "hello, I am Groovy inside Maven. What? What am I doing here?? I thought he was my arch nemesis! I'm confused."
println ""
}

}

}

plugins {
plugin('org.codehaus.plexus:plexus-component-metadata:1.5.4') {
executions {
execution(goals: ['generate-metadata', 'generate-test-metadata'])
}
}
}
import org.sonatype.maven.polyglot.scala.model._
implicit val scalaVersion = ScalaVersion("2.10.2")
ScalaModel(
"" % "tesla-polyglot-scala",
name = "Polyglot Tesla :: Scala",
contributors = Seq(
Contributor(
name = "Christopher Hunt",
organization = "Typesafe",
organizationUrl = "http://typesafe.com"
)
),
parent = Parent("io.tesla.polyglot" % "tesla-polyglot" % "0.0.1-SNAPSHOT"),
repositories = Seq(
Repository(
snapshots = RepositoryPolicy(enabled = false),
id = "sonatype-public-grid",
url = "http://repository.sonatype.org/content/groups/sonatype-public-grid/"
)
),
dependencies = Seq(
"io.tesla.polyglot" % "tesla-polyglot-common" % "0.0.1-SNAPSHOT",
"com.twitter" %% "util-eval" % "6.3.8",
"com.googlecode.kiama" %% "kiama" % "1.5.1",
"org.specs2" %% "specs2" % "2.1.1" % "test",
"junit" % "junit" % "" % "test"
),
build = Build(
plugins = Seq(
Plugin(
"io.tesla.maven.plugins" % "tesla-license-plugin",
configuration = Config(
header = "../license-header.txt"
)
)
),
tasks = Seq(Task("someTaskId", "verify") {
ec => println("I'm Scala running during the verify phase. The ec passed in allows me to access the project")
})
),
modelVersion = "4.0.0"
)
modelVersion:	
  4.0.0
parent:	
  {artifactId:	
  tesla,	
  groupId:	
  io.tesla,	
  relativePath:	
  ../pom.xml,	
  version:	
  '4'}
groupId:	
  io.tesla.polyglot
artifactId:	
  tesla-­‐polyglot
version:	
  0.0.1-­‐SNAPSHOT
packaging:	
  pom
name:	
  'Polyglot	
  Tesla	
  ::	
  Aggregator'
properties:	
  {sisuInjectVersion:	
  0.0.0.M2a,	
  teslaVersion:	
  3.1.0}
build:
	
  	
  plugins:
	
  	
  -­‐	
  artifactId:	
  plexus-­‐component-­‐metadata
	
  	
  	
  	
  executions:
	
  	
  	
  	
  -­‐	
  goals:	
  [generate-­‐metadata,	
  generate-­‐test-­‐metadata]
	
  	
  	
  	
  	
  	
  id:	
  default
	
  	
  	
  	
  	
  	
  inherited:	
  true
	
  	
  	
  	
  	
  	
  priority:	
  0
	
  	
  	
  	
  extensions:	
  false
	
  	
  	
  	
  groupId:	
  org.codehaus.plexus
	
  	
  	
  	
  inherited:	
  true
	
  	
  	
  	
  version:	
  1.5.4
modules:	
  [
	
  	
  tesla-­‐polyglot-­‐common,	
  
	
  	
  tesla-­‐polyglot-­‐atom,	
  
	
  	
  tesla-­‐polyglot-­‐ruby,	
  
	
  	
  tesla-­‐polyglot-­‐groovy,
	
  	
  tesla-­‐polyglot-­‐yaml,	
  
	
  	
  tesla-­‐polyglot-­‐clojure,	
  
	
  	
  tesla-­‐polyglot-­‐scala,	
  
	
  	
  tesla-­‐polyglot-­‐cli,
	
  	
  tesla-­‐polyglot-­‐maven-­‐plugin]
dependencyManagement:
	
  	
  dependencies:
	
  	
  -­‐	
  {artifactId:	
  org.eclipse.sisu.inject,	
  groupId:	
  org.eclipse.sisu,	
  optional:	
  false,	
  type:	
  jar,	
  version:	
  '${sisuInjectVersion}'}
	
  	
  -­‐	
  {artifactId:	
  org.eclipse.sisu.plexus,	
  groupId:	
  org.eclipse.sisu,	
  optional:	
  false,	
  type:	
  jar,	
  version:	
  '${sisuInjectVersion}'}
	
  	
  -­‐	
  {artifactId:	
  maven-­‐model-­‐builder,	
  groupId:	
  org.apache.maven,	
  optional:	
  false,	
  type:	
  jar,	
  version:	
  3.1.0}
	
  	
  -­‐	
  {artifactId:	
  maven-­‐embedder,	
  groupId:	
  org.apache.maven,	
  optional:	
  false,	
  type:	
  jar,	
  version:	
  3.1.0}
	
  	
  -­‐	
  {artifactId:	
  junit,	
  groupId:	
  junit,	
  optional:	
  false,	
  scope:	
  test,	
  type:	
  jar,	
  version:	
  '4.11'}
project "Polyglot Tesla :: Aggregator" @ "" as pom
id: io.tesla.polyglot:tesla-polyglot:0.0.1-SNAPSHOT
inherits: io.tesla:tesla:4
properties: [ sisuInjectVersion: "0.0.0.M2a"
teslaVersion: "3.1.0" ]
overrides: [ org.eclipse.sisu:org.eclipse.sisu.inject:${sisuInjectVersion}
org.eclipse.sisu:org.eclipse.sisu.plexus:${sisuInjectVersion}
org.apache.maven:maven-model-builder:3.1.0
org.apache.maven:maven-embedder:3.1.0
junit:junit:4.11 ]
modules: [ tesla-polyglot-common
tesla-polyglot-atom
tesla-polyglot-ruby
tesla-polyglot-groovy
tesla-polyglot-yaml
tesla-polyglot-clojure
tesla-polyglot-scala
tesla-polyglot-cli
tesla-polyglot-maven-plugin ]
plugin
id: org.codehaus.plexus:plexus-component-metadata:1.5.4
Mavenize like a champ.
Introduction to Maven Virtual Training
Thursday, February 13, 2014
1:00PM-7:30PM EST (UTC -5 hours)
575CAD/student
Small classes, an accomplished instructor, top-notch training…all from
the comfort of your own pajamas office. Learn more at www.takari.io

Más contenido relacionado

Último

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Último (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Destacado

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 

Destacado (20)

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 

Maven just won't die -- WTF is Takari?

  • 1. WTF is Takari? Jason van Zyl http://takari.io @takari_io
  • 3. It’s too hard for organizations to efficiently deliver JVM-based software
  • 4. The problem with delivery What is an application and how do you reason about it? Why you might be here today? External Services Internal Components 3rd Party Components Configuration Machine v1.0
  • 5. Software Delivery Chain Developer checks code into the SCM IDE Developer requests components from Repoman and the components are delivered to the developer 2 CI checks code out of the SCM SCM CI 3 CI instructs build tool to perform a build 4 1 Repository Central Build 5 Build tool deploys components to repository manager Provisioning system requests components and configuration from Nexus. 6 Provisioner 7 Agent Provisioning system provisions apps and components to the agents managing runtimes Agent Agent
  • 8. Incremental build We’ve supported incremental build in m2eclipse for quite a while ‣ ‣ ‣ ‣ m2eclipse is capable of operating on a single resource with a single Mojo call -- very efficient We implemented incremental build for Maven on the CLI We implemented a custom Guice scope for Maven’s core to @Inject what we call a BuildContext We Implemented versions the Mojos for the standard lifecycle including and incremental CLI compiler based on Eclipse JDT
  • 9. public class BuildAvoidanceDemo { private final BuildContext context; private final File inputDir; private final File outputDir; private final Set<String> includes; private final Set<String> excludes; // // // // // // performed automatically by the framework 1. 2. 3. 4. delete all stale or orphaned output files produced during previous build(s) persist BuildContext state such that it can be used during the next build replay any messages not cleared from previous build(s) raise build error if any of the inputs processed in this or previous builds had SEVERITY_ERROR message @Inject public BuildAvoidanceDemo(BuildContext context, File inputDir, Set<String> includes, Set<String> excludes, File outputDir) { this.context = context; this.inputDir = inputDir; this.includes = includes; this.excludes = excludes; this.outputDir = outputDir; } public void execute() throws IOException { // determine all input files, regardless of their up-to-date status // in this particular case use basedir with ant-style includes/excludes patterns FileSet inputs = new FileSetBuilder(inputDir).addIncludes(includes).addExcludes(excludes).build(); // context.registerInputs registers specified inputs FileSets with the build context, which is necessary to // enable cleanup of stale outputs. it returns collection of input files that require processing for (File inputFile : context.registerInputs(inputs)) { // context.addProcessedInput marks beginning of processing of the input file // it clears all output files and messages associated with the input file for this build context.addProcessedInput(inputFile); // mapping between input and output files is outside of scope of BuildContext API File outputFile = determineOuputFile(outputDir, inputFile); // context.newOutputStream associates input and output files, which is necessary to determine input files // that require processing and to perform cleanup of stale output files. OutputStream os = context.newOutputStream(inputFile, outputFile); try { // generation of output file contents is outside of scope of BuildContext API // likewise, Message object, if any, is application specific and is not part of BuildContext API Collection<Message> messages = generateOutput(inputFile, os); } } } // record error and warning messages generated during input file processing for (Message message : messages) { context.addMessage(inputFile, message.getLine(), message.getColumn(), message.getText(), BuildContext.SEVERITY_ERROR, null); } } finally { os.close(); }
  • 13. Aggressive parallel mode with smart scheduling Upstream
  • 14. Aggressive parallel mode with smart scheduling Build Telemetry Critical path
  • 17. SCM SCM SCM SCM revision 100:branch X revision 101:branch X revision 102:branch X revision 103:branch X Generation 100 Generation 101 Generation 102 Generation 103 As time passes and your product gets better (I hope)
  • 18. Workspaces How does a workspace relate to a generation? provisio-webserver javax.inject jetty-server javax.servlet jetty-continuation jetty-http jetty-io jetty-util jetty-webapp jetty-xml jetty-util jetty-deploy jetty-webapp jetty-util jetty-jmx jetty-util jetty-util
  • 19. What if generations were supported across the delivery chain? IDE 2 SCM CI 3 4 1 Consuming a new generation Repository Build 5 Producing a new generation 6 Provisioner 7 Agent Agent Agent
  • 20. Generations collaboration between build and repository manager
  • 21.
  • 22.
  • 23.
  • 25. Polyglot for Maven Maven can support different formats and even DSLs ‣ A lot of work has been done recently on the Ruby and Scala DSLs, but there is support for Groovy, Atom, YAML, and Clojure as well ‣ ‣ We cut the 0.9.0 release yesterday and it’s available to try The code and instructions are available at https://github.com/tesla/tesla-polyglot
  • 26. project 'Polyglot Tesla :: Aggregator' do model_version '4.0.0' id 'io.tesla.polyglot:tesla-polyglot:0.0.1-SNAPSHOT' inherit 'io.tesla:tesla:4' packaging 'pom' properties( 'sisuInjectVersion' => '0.0.0.M2a', 'teslaVersion' => '3.1.0' ) modules [ 'tesla-polyglot-common', 'tesla-polyglot-atom', 'tesla-polyglot-ruby', 'tesla-polyglot-groovy', 'tesla-polyglot-yaml', 'tesla-polyglot-clojure', 'tesla-polyglot-scala', 'tesla-polyglot-cli', 'tesla-polyglot-maven-plugin' ] overrides do jar 'org.eclipse.sisu:org.eclipse.sisu.inject:${sisuInjectVersion}' jar 'org.eclipse.sisu:org.eclipse.sisu.plexus:${sisuInjectVersion}' jar 'org.apache.maven:maven-model-builder:3.1.0' jar 'org.apache.maven:maven-embedder:3.1.0' jar( 'junit:junit:4.11', :scope => 'test' ) end plugin 'org.codehaus.plexus:plexus-component-metadata:1.5.4' do execute_goals 'generate-metadata', 'generate-test-metadata' end build do execute("first", :validate) do |context| puts "Hello from JRuby!" end end end
  • 27. project { modelVersion '4.0.0' parent('io.tesla:tesla:4') groupId 'io.tesla.polyglot' artifactId 'tesla-polyglot' version '0.0.1-SNAPSHOT' packaging 'pom' name 'Polyglot Tesla :: Aggregator' modules([ 'tesla-polyglot-common', 'tesla-polyglot-atom', 'tesla-polyglot-ruby', 'tesla-polyglot-groovy', 'tesla-polyglot-yaml', 'tesla-polyglot-clojure', 'tesla-polyglot-scala', 'tesla-polyglot-cli', 'tesla-polyglot-maven-plugin', ]) properties { sisuInjectVersion '0.0.0.M2a' teslaVersion '3.1.0' } dependencyManagement { dependencies { dependency('org.eclipse.sisu:org.eclipse.sisu.inject:${sisuInjectVersion}') dependency('org.eclipse.sisu:org.eclipse.sisu.plexus:${sisuInjectVersion}') dependency('org.apache.maven:maven-model-builder:3.1.0') dependency('org.apache.maven:maven-embedder:3.1.0') dependency('junit:junit:4.11:test') } } build { $execute(id: 'hello', phase: 'validate') { println "" println "hello, I am Groovy inside Maven. What? What am I doing here?? I thought he was my arch nemesis! I'm confused." println "" } } } plugins { plugin('org.codehaus.plexus:plexus-component-metadata:1.5.4') { executions { execution(goals: ['generate-metadata', 'generate-test-metadata']) } } }
  • 28. import org.sonatype.maven.polyglot.scala.model._ implicit val scalaVersion = ScalaVersion("2.10.2") ScalaModel( "" % "tesla-polyglot-scala", name = "Polyglot Tesla :: Scala", contributors = Seq( Contributor( name = "Christopher Hunt", organization = "Typesafe", organizationUrl = "http://typesafe.com" ) ), parent = Parent("io.tesla.polyglot" % "tesla-polyglot" % "0.0.1-SNAPSHOT"), repositories = Seq( Repository( snapshots = RepositoryPolicy(enabled = false), id = "sonatype-public-grid", url = "http://repository.sonatype.org/content/groups/sonatype-public-grid/" ) ), dependencies = Seq( "io.tesla.polyglot" % "tesla-polyglot-common" % "0.0.1-SNAPSHOT", "com.twitter" %% "util-eval" % "6.3.8", "com.googlecode.kiama" %% "kiama" % "1.5.1", "org.specs2" %% "specs2" % "2.1.1" % "test", "junit" % "junit" % "" % "test" ), build = Build( plugins = Seq( Plugin( "io.tesla.maven.plugins" % "tesla-license-plugin", configuration = Config( header = "../license-header.txt" ) ) ), tasks = Seq(Task("someTaskId", "verify") { ec => println("I'm Scala running during the verify phase. The ec passed in allows me to access the project") }) ), modelVersion = "4.0.0" )
  • 29. modelVersion:  4.0.0 parent:  {artifactId:  tesla,  groupId:  io.tesla,  relativePath:  ../pom.xml,  version:  '4'} groupId:  io.tesla.polyglot artifactId:  tesla-­‐polyglot version:  0.0.1-­‐SNAPSHOT packaging:  pom name:  'Polyglot  Tesla  ::  Aggregator' properties:  {sisuInjectVersion:  0.0.0.M2a,  teslaVersion:  3.1.0} build:    plugins:    -­‐  artifactId:  plexus-­‐component-­‐metadata        executions:        -­‐  goals:  [generate-­‐metadata,  generate-­‐test-­‐metadata]            id:  default            inherited:  true            priority:  0        extensions:  false        groupId:  org.codehaus.plexus        inherited:  true        version:  1.5.4 modules:  [    tesla-­‐polyglot-­‐common,      tesla-­‐polyglot-­‐atom,      tesla-­‐polyglot-­‐ruby,      tesla-­‐polyglot-­‐groovy,    tesla-­‐polyglot-­‐yaml,      tesla-­‐polyglot-­‐clojure,      tesla-­‐polyglot-­‐scala,      tesla-­‐polyglot-­‐cli,    tesla-­‐polyglot-­‐maven-­‐plugin] dependencyManagement:    dependencies:    -­‐  {artifactId:  org.eclipse.sisu.inject,  groupId:  org.eclipse.sisu,  optional:  false,  type:  jar,  version:  '${sisuInjectVersion}'}    -­‐  {artifactId:  org.eclipse.sisu.plexus,  groupId:  org.eclipse.sisu,  optional:  false,  type:  jar,  version:  '${sisuInjectVersion}'}    -­‐  {artifactId:  maven-­‐model-­‐builder,  groupId:  org.apache.maven,  optional:  false,  type:  jar,  version:  3.1.0}    -­‐  {artifactId:  maven-­‐embedder,  groupId:  org.apache.maven,  optional:  false,  type:  jar,  version:  3.1.0}    -­‐  {artifactId:  junit,  groupId:  junit,  optional:  false,  scope:  test,  type:  jar,  version:  '4.11'}
  • 30. project "Polyglot Tesla :: Aggregator" @ "" as pom id: io.tesla.polyglot:tesla-polyglot:0.0.1-SNAPSHOT inherits: io.tesla:tesla:4 properties: [ sisuInjectVersion: "0.0.0.M2a" teslaVersion: "3.1.0" ] overrides: [ org.eclipse.sisu:org.eclipse.sisu.inject:${sisuInjectVersion} org.eclipse.sisu:org.eclipse.sisu.plexus:${sisuInjectVersion} org.apache.maven:maven-model-builder:3.1.0 org.apache.maven:maven-embedder:3.1.0 junit:junit:4.11 ] modules: [ tesla-polyglot-common tesla-polyglot-atom tesla-polyglot-ruby tesla-polyglot-groovy tesla-polyglot-yaml tesla-polyglot-clojure tesla-polyglot-scala tesla-polyglot-cli tesla-polyglot-maven-plugin ] plugin id: org.codehaus.plexus:plexus-component-metadata:1.5.4
  • 31.
  • 32. Mavenize like a champ. Introduction to Maven Virtual Training Thursday, February 13, 2014 1:00PM-7:30PM EST (UTC -5 hours) 575CAD/student Small classes, an accomplished instructor, top-notch training…all from the comfort of your own pajamas office. Learn more at www.takari.io