SlideShare a Scribd company logo
1 of 30
Download to read offline
WUFF
Building Eclipse Applications and Plugins 

with Gradle
Gradle Summit 2015

Andrey Hihlovskiy
Introduction to Wuff
• Wuff is a set of gradle plugins
• Run, debug & build

Eclipse Plugins & Applications
• Supports multiple Eclipse versions
• Implements own configuration DSL
History: 2009
Bunch of non-automated Eclipse Plugins
History: 2011
Move to Eclipse Tycho
History: 2014
Started development of Wuff
OSGi challenges
• Duplicate dependencies: OSGi and Maven?
• From where to get these OSGi dependencies?
• No transitive dependencies?
• How to include non-OSGi libraries?
Eclipse mavenization
• Download Eclipse distro from:

“${eclipseMirror}/eclipse/technology/epp/downloads…”
• Unpack it to temp dir
• Read manifest of each plugin, calculate dependencies
• Generate POM for each plugin
• Install each plugin to ~/.m2/repository
Wuff nowadays
• 8 releases
• 7 contributors
• some features in beta
• some great ideas in the air
• version 1.0 is coming this summer
Wuff Gradle Plugins
org.akhikhl.wuff.osgi-bundle
org.akhikhl.wuff.eclipse-bundle
org.akhikhl.wuff.eclipse-equinox-app
org.akhikhl.wuff.eclipse-rcp-app
org.akhikhl.wuff.eclipse-ide-app
org.akhikhl.wuff.efxclipse-app
org.akhikhl.wuff.eclipse-feature
org.akhikhl.wuff.eclipse-repository
Wuff tasks
# equinox-app, rcp-app, efxclipse-app

gradle scaffold



# rcp-app, ide-app, efxclipse-app
gradle run



# rcp-app, ide-app, efxclipse-app
gradle debug



# bundle, p2-repo, equinox-app, 

# rcp-app, ide-app, efxclipse-app
gradle build
Wuff: Eclipse Bundle
apply plugin: ‘java’
apply plugin: ‘org.akhikhl.wuff.eclipse-bundle’



$ gradle build

Effects:
OSGi manifest is created or merged
‘plugin.xml’ is created or merged
‘Require-Bundle’ converted to Gradle dependencies
Eclipse Bundle JAR is created
Wuff: Equinox App
apply plugin: ‘java’
apply plugin: ‘org.akhikhl.wuff.eclipse-equinox-app’
// plugin.xml
<extension id=“app”
point=“org.eclipse.core.runtime.applications”> ...



$ gradle run

Effects:
Equinox configuration is created
“org.eclipse.equinox.launcher.Main” is launched
Wuff: Equinox Product
apply plugin: ‘java’
apply plugin: ‘org.akhikhl.wuff.eclipse-equinox-app’
// plugin.xml
<extension id=“app”
point=“org.eclipse.core.runtime.applications”> ...



$ gradle build

Effect:
Self-Contained Equinox App is created in “build/output”
Equinox Product Layout
Platform-specific 

Equinox Products
products {
product platform: 'linux', arch: 'x86_32'
product platform: 'linux', arch: 'x86_64'
product platform: 'windows', arch: 'x86_32'
product platform: 'windows', arch: 'x86_64'
product platform: 'macosx', arch: 'x86_64'
archiveProducts = true
}



$ gradle build

Effect:
5 platform-specific products are created
Wuff: RCP App
apply plugin: ‘java’
apply plugin: ‘org.akhikhl.wuff.eclipse-rcp-app’
Define Application, Perspective,View ...





$ gradle scaffold
$ gradle run

$ gradle debug
$ gradle build
RCP App vs Equinox App
Equinox App
Wuff: equinox runtime
Wuff: products
You: Application class
RCP App
Wuff: equinox runtime
Wuff: products
You: Application class

Wuff: RCP plugins
You: Views, Perspectives
You: Intro pages
You: Splash screen
Wuff: IDE App
apply plugin: ‘org.akhikhl.wuff.eclipse-ide-app’
IDE App vs RCP App
RCP App
Wuff: equinox runtime
Wuff: products
You: Application class

Wuff: RCP plugins
You: Views, Perspectives
You: Intro pages
You: Splash screen
IDE App
Wuff: equinox runtime
Wuff: products
You: Application class

Wuff: RCP plugins
You: Views, Perspectives
You: Intro pages
You: Splash screen
Wuff: IDE plugins
Switching Eclipse versions
wuff {
selectedEclipseVersion = ‘4.4.2’
}



$ gradle build

Out-of-the-box supported Eclipse versions: 

‘3.7.1’,‘3.7.2’, 

‘4.2.1’,‘4.2.2’, 

‘4.3.1’,‘4.3.2’, 

‘4.4’,‘4.4.1’,‘4.4.2’.
Defining Eclipse version
wuff {
eclipseVersion(‘myVersion’) {

eclipseMavenGroup = ‘myGroup’

sources {
source ‘http://...’

}
}
selectedEclipseVersion = ‘myVersion’
}
Installing language packs
wuff {
languagePack ‘de’
languagePack ‘fr’
}

Out-of-the-box supported languages:

‘de’ (German)
‘fr’ (French)
‘es’ (Spanish)
Localizing product
products {
product platform: 'linux', arch: ‘x86_64' // english
product platform: 'linux', arch: ‘x86_64’, language: ‘de’

product platform: 'linux', arch: 'x86_64', language: ‘fr’
archiveProducts = true
}

Wrapping non-OSGi lib
dependencies {
compile ‘org.jdom:jdom2:2.0.6’
}

MANIFEST.MF:

Bundle-ClassPath: jdom-2.0.6.jar
Export-Package: org.jdom2;...
jdom2-bundle-2.0.6.jar
Including non-OSGi lib
dependencies {
privateLib ‘org.jdom:jdom2:2.0.6’
}

MANIFEST.MF:

Bundle-ClassPath: jdom-2.0.6.jar
including bundle
Generating Eclipse Features
apply plugin: ‘org.akhikhl.wuff.eclipse-feature’
dependencies {
feature ‘:MyBundle’
feature “$eclipseMavenGroup:org.eclipse.jface:+”
}
feature.xml, MANIFEST.MF
myFeature_1.0.0.jar
Generating P2 Repositories
apply plugin: ‘org.akhikhl.wuff.eclipse-repository’
dependencies {
repository project(‘:MyFeature1’)
repository “$eclipseMavenGroup:org.eclipse.rcp:+”
}
artifacts.xml, content.xml, features/, plugins/
myRepository_1.0.0.zip
Wuff: version 1.0 and beyond
• Resolve OSGi bundles
directly from p2 repos
• More control over
manifest and plugin.xml
generation
• IDE integration
Wuff is here for you
https://github.com/akhikhl/wuff
https://github.com/akhikhl/wuff/wiki
at Gradle Plugin Portal
at JCenter
at Maven Central
Thanks for listening!
Andrey Hihlovskiy
akhikhl at GitHub
akhikhl@gmail.com
@AndreyHihlovskiy

More Related Content

What's hot

Introduction to Eclipse Che / EclipseCon 2014
Introduction to Eclipse Che / EclipseCon 2014Introduction to Eclipse Che / EclipseCon 2014
Introduction to Eclipse Che / EclipseCon 2014Florent BENOIT
 
Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6William Marques
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsSarath C
 
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)🎤 Hanno Embregts 🎸
 
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷JavaIntroduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷JavaToshiaki Maki
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016Matt Raible
 
Intro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler JewellIntro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler Jewelljwi11iams
 
Introduction to Jenkins X
Introduction to Jenkins XIntroduction to Jenkins X
Introduction to Jenkins XFaithlin Paul
 
Migrating 25K lines of Ant scripting to Gradle
Migrating 25K lines of Ant scripting to GradleMigrating 25K lines of Ant scripting to Gradle
Migrating 25K lines of Ant scripting to Gradle🎤 Hanno Embregts 🎸
 
From devOps to front end Ops, test first
From devOps to front end Ops, test firstFrom devOps to front end Ops, test first
From devOps to front end Ops, test firstCaesar Chi
 
ng4 webpack and yarn in JHipster
ng4 webpack and yarn in JHipsterng4 webpack and yarn in JHipster
ng4 webpack and yarn in JHipsterSendil Kumar
 
Type script for_java_dev_jul_2020
Type script for_java_dev_jul_2020Type script for_java_dev_jul_2020
Type script for_java_dev_jul_2020Yakov Fain
 
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Ted Won
 

What's hot (20)

Spring Boot Intro
Spring Boot IntroSpring Boot Intro
Spring Boot Intro
 
Introduction to Eclipse Che / EclipseCon 2014
Introduction to Eclipse Che / EclipseCon 2014Introduction to Eclipse Che / EclipseCon 2014
Introduction to Eclipse Che / EclipseCon 2014
 
Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6
 
Angular 2 in-1
Angular 2 in-1 Angular 2 in-1
Angular 2 in-1
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS Apps
 
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
 
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷JavaIntroduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷Java
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
 
Intro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler JewellIntro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler Jewell
 
Vue.js Use Cases
Vue.js Use CasesVue.js Use Cases
Vue.js Use Cases
 
React native
React nativeReact native
React native
 
React JS
React JSReact JS
React JS
 
Introduction to Jenkins X
Introduction to Jenkins XIntroduction to Jenkins X
Introduction to Jenkins X
 
Kraken.js Lab Primer
Kraken.js Lab PrimerKraken.js Lab Primer
Kraken.js Lab Primer
 
Migrating 25K lines of Ant scripting to Gradle
Migrating 25K lines of Ant scripting to GradleMigrating 25K lines of Ant scripting to Gradle
Migrating 25K lines of Ant scripting to Gradle
 
From devOps to front end Ops, test first
From devOps to front end Ops, test firstFrom devOps to front end Ops, test first
From devOps to front end Ops, test first
 
7 maven vsgradle
7 maven vsgradle7 maven vsgradle
7 maven vsgradle
 
ng4 webpack and yarn in JHipster
ng4 webpack and yarn in JHipsterng4 webpack and yarn in JHipster
ng4 webpack and yarn in JHipster
 
Type script for_java_dev_jul_2020
Type script for_java_dev_jul_2020Type script for_java_dev_jul_2020
Type script for_java_dev_jul_2020
 
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
 

Viewers also liked

Einführung in die webOS Programmierung
Einführung in die webOS ProgrammierungEinführung in die webOS Programmierung
Einführung in die webOS ProgrammierungMarkus Leutwyler
 
Griffon In Front Grails In Back
Griffon In Front Grails In BackGriffon In Front Grails In Back
Griffon In Front Grails In BackJim Shingler
 
Build And Automation
Build And AutomationBuild And Automation
Build And AutomationRajesh Kumar
 
Groovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGroovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGR8Conf
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
Configuration Management
Configuration ManagementConfiguration Management
Configuration ManagementRajesh Kumar
 
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12Puppet
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungMario Müller
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with dockerRuoshi Ling
 
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home builtJenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home builtMark Waite
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 

Viewers also liked (12)

Einführung in die webOS Programmierung
Einführung in die webOS ProgrammierungEinführung in die webOS Programmierung
Einführung in die webOS Programmierung
 
Griffon In Front Grails In Back
Griffon In Front Grails In BackGriffon In Front Grails In Back
Griffon In Front Grails In Back
 
Cruise control
Cruise controlCruise control
Cruise control
 
Build And Automation
Build And AutomationBuild And Automation
Build And Automation
 
Groovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGroovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examples
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Configuration Management
Configuration ManagementConfiguration Management
Configuration Management
 
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende Einführung
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with docker
 
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home builtJenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 

Similar to Wuff: Building Eclipse Applications and Plugins with Gradle

Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014André Rømcke
 
Using Jhipster 4 for Generating Angular/Spring Boot Apps
Using Jhipster 4 for Generating Angular/Spring Boot AppsUsing Jhipster 4 for Generating Angular/Spring Boot Apps
Using Jhipster 4 for Generating Angular/Spring Boot AppsVMware Tanzu
 
Android training in Noida
Android training in NoidaAndroid training in Noida
Android training in NoidaSeoClass
 
NCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile AppsNCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile AppsJohn M. Wargo
 
Run your Java apps on Cloud Foundry
Run your Java apps on Cloud FoundryRun your Java apps on Cloud Foundry
Run your Java apps on Cloud FoundryAndy Piper
 
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)jaxLondonConference
 
Run your Java code on Cloud Foundry
Run your Java code on Cloud FoundryRun your Java code on Cloud Foundry
Run your Java code on Cloud FoundryAndy Piper
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshotssimonscholz
 
ShipItCon - Continuous Deployment and Multicloud with Ansible and Kubernetes
ShipItCon - Continuous Deployment and Multicloud with Ansible and KubernetesShipItCon - Continuous Deployment and Multicloud with Ansible and Kubernetes
ShipItCon - Continuous Deployment and Multicloud with Ansible and KubernetesMihai Criveti
 
Effective Spring on Kubernetes
Effective Spring on KubernetesEffective Spring on Kubernetes
Effective Spring on KubernetesNeven Cvetković
 
Eclipse Overview
Eclipse Overview Eclipse Overview
Eclipse Overview Lars Vogel
 
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...Applitools
 
Can I Contain This?
Can I Contain This?Can I Contain This?
Can I Contain This?Eficode
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitAndreas Heim
 

Similar to Wuff: Building Eclipse Applications and Plugins with Gradle (20)

Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014
 
Android programming-basics
Android programming-basicsAndroid programming-basics
Android programming-basics
 
Using Jhipster 4 for Generating Angular/Spring Boot Apps
Using Jhipster 4 for Generating Angular/Spring Boot AppsUsing Jhipster 4 for Generating Angular/Spring Boot Apps
Using Jhipster 4 for Generating Angular/Spring Boot Apps
 
Android training in Noida
Android training in NoidaAndroid training in Noida
Android training in Noida
 
NCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile AppsNCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile Apps
 
Run your Java apps on Cloud Foundry
Run your Java apps on Cloud FoundryRun your Java apps on Cloud Foundry
Run your Java apps on Cloud Foundry
 
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
 
Run your Java code on Cloud Foundry
Run your Java code on Cloud FoundryRun your Java code on Cloud Foundry
Run your Java code on Cloud Foundry
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
ShipItCon - Continuous Deployment and Multicloud with Ansible and Kubernetes
ShipItCon - Continuous Deployment and Multicloud with Ansible and KubernetesShipItCon - Continuous Deployment and Multicloud with Ansible and Kubernetes
ShipItCon - Continuous Deployment and Multicloud with Ansible and Kubernetes
 
Apache cordova
Apache cordovaApache cordova
Apache cordova
 
Codename one
Codename oneCodename one
Codename one
 
Effective Spring on Kubernetes
Effective Spring on KubernetesEffective Spring on Kubernetes
Effective Spring on Kubernetes
 
Eclipse Overview
Eclipse Overview Eclipse Overview
Eclipse Overview
 
Android NDK
Android NDKAndroid NDK
Android NDK
 
Android ndk
Android ndkAndroid ndk
Android ndk
 
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
 
Can I Contain This?
Can I Contain This?Can I Contain This?
Can I Contain This?
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profit
 

Recently uploaded

WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...WSO2
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
%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 masabamasaba
 
%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 Stilfonteinmasabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 

Recently uploaded (20)

WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
%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
 
%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
 
Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...
Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...
Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 

Wuff: Building Eclipse Applications and Plugins with Gradle

  • 1. WUFF Building Eclipse Applications and Plugins 
 with Gradle Gradle Summit 2015
 Andrey Hihlovskiy
  • 2. Introduction to Wuff • Wuff is a set of gradle plugins • Run, debug & build
 Eclipse Plugins & Applications • Supports multiple Eclipse versions • Implements own configuration DSL
  • 3. History: 2009 Bunch of non-automated Eclipse Plugins
  • 4. History: 2011 Move to Eclipse Tycho
  • 6. OSGi challenges • Duplicate dependencies: OSGi and Maven? • From where to get these OSGi dependencies? • No transitive dependencies? • How to include non-OSGi libraries?
  • 7. Eclipse mavenization • Download Eclipse distro from:
 “${eclipseMirror}/eclipse/technology/epp/downloads…” • Unpack it to temp dir • Read manifest of each plugin, calculate dependencies • Generate POM for each plugin • Install each plugin to ~/.m2/repository
  • 8. Wuff nowadays • 8 releases • 7 contributors • some features in beta • some great ideas in the air • version 1.0 is coming this summer
  • 10. Wuff tasks # equinox-app, rcp-app, efxclipse-app
 gradle scaffold
 
 # rcp-app, ide-app, efxclipse-app gradle run
 
 # rcp-app, ide-app, efxclipse-app gradle debug
 
 # bundle, p2-repo, equinox-app, 
 # rcp-app, ide-app, efxclipse-app gradle build
  • 11. Wuff: Eclipse Bundle apply plugin: ‘java’ apply plugin: ‘org.akhikhl.wuff.eclipse-bundle’
 
 $ gradle build
 Effects: OSGi manifest is created or merged ‘plugin.xml’ is created or merged ‘Require-Bundle’ converted to Gradle dependencies Eclipse Bundle JAR is created
  • 12. Wuff: Equinox App apply plugin: ‘java’ apply plugin: ‘org.akhikhl.wuff.eclipse-equinox-app’ // plugin.xml <extension id=“app” point=“org.eclipse.core.runtime.applications”> ...
 
 $ gradle run
 Effects: Equinox configuration is created “org.eclipse.equinox.launcher.Main” is launched
  • 13. Wuff: Equinox Product apply plugin: ‘java’ apply plugin: ‘org.akhikhl.wuff.eclipse-equinox-app’ // plugin.xml <extension id=“app” point=“org.eclipse.core.runtime.applications”> ...
 
 $ gradle build
 Effect: Self-Contained Equinox App is created in “build/output”
  • 15. Platform-specific 
 Equinox Products products { product platform: 'linux', arch: 'x86_32' product platform: 'linux', arch: 'x86_64' product platform: 'windows', arch: 'x86_32' product platform: 'windows', arch: 'x86_64' product platform: 'macosx', arch: 'x86_64' archiveProducts = true }
 
 $ gradle build
 Effect: 5 platform-specific products are created
  • 16. Wuff: RCP App apply plugin: ‘java’ apply plugin: ‘org.akhikhl.wuff.eclipse-rcp-app’ Define Application, Perspective,View ...
 
 
 $ gradle scaffold $ gradle run
 $ gradle debug $ gradle build
  • 17. RCP App vs Equinox App Equinox App Wuff: equinox runtime Wuff: products You: Application class RCP App Wuff: equinox runtime Wuff: products You: Application class
 Wuff: RCP plugins You: Views, Perspectives You: Intro pages You: Splash screen
  • 18. Wuff: IDE App apply plugin: ‘org.akhikhl.wuff.eclipse-ide-app’
  • 19. IDE App vs RCP App RCP App Wuff: equinox runtime Wuff: products You: Application class
 Wuff: RCP plugins You: Views, Perspectives You: Intro pages You: Splash screen IDE App Wuff: equinox runtime Wuff: products You: Application class
 Wuff: RCP plugins You: Views, Perspectives You: Intro pages You: Splash screen Wuff: IDE plugins
  • 20. Switching Eclipse versions wuff { selectedEclipseVersion = ‘4.4.2’ }
 
 $ gradle build
 Out-of-the-box supported Eclipse versions: 
 ‘3.7.1’,‘3.7.2’, 
 ‘4.2.1’,‘4.2.2’, 
 ‘4.3.1’,‘4.3.2’, 
 ‘4.4’,‘4.4.1’,‘4.4.2’.
  • 21. Defining Eclipse version wuff { eclipseVersion(‘myVersion’) {
 eclipseMavenGroup = ‘myGroup’
 sources { source ‘http://...’
 } } selectedEclipseVersion = ‘myVersion’ }
  • 22. Installing language packs wuff { languagePack ‘de’ languagePack ‘fr’ }
 Out-of-the-box supported languages:
 ‘de’ (German) ‘fr’ (French) ‘es’ (Spanish)
  • 23. Localizing product products { product platform: 'linux', arch: ‘x86_64' // english product platform: 'linux', arch: ‘x86_64’, language: ‘de’
 product platform: 'linux', arch: 'x86_64', language: ‘fr’ archiveProducts = true }

  • 24. Wrapping non-OSGi lib dependencies { compile ‘org.jdom:jdom2:2.0.6’ }
 MANIFEST.MF:
 Bundle-ClassPath: jdom-2.0.6.jar Export-Package: org.jdom2;... jdom2-bundle-2.0.6.jar
  • 25. Including non-OSGi lib dependencies { privateLib ‘org.jdom:jdom2:2.0.6’ }
 MANIFEST.MF:
 Bundle-ClassPath: jdom-2.0.6.jar including bundle
  • 26. Generating Eclipse Features apply plugin: ‘org.akhikhl.wuff.eclipse-feature’ dependencies { feature ‘:MyBundle’ feature “$eclipseMavenGroup:org.eclipse.jface:+” } feature.xml, MANIFEST.MF myFeature_1.0.0.jar
  • 27. Generating P2 Repositories apply plugin: ‘org.akhikhl.wuff.eclipse-repository’ dependencies { repository project(‘:MyFeature1’) repository “$eclipseMavenGroup:org.eclipse.rcp:+” } artifacts.xml, content.xml, features/, plugins/ myRepository_1.0.0.zip
  • 28. Wuff: version 1.0 and beyond • Resolve OSGi bundles directly from p2 repos • More control over manifest and plugin.xml generation • IDE integration
  • 29. Wuff is here for you https://github.com/akhikhl/wuff https://github.com/akhikhl/wuff/wiki at Gradle Plugin Portal at JCenter at Maven Central
  • 30. Thanks for listening! Andrey Hihlovskiy akhikhl at GitHub akhikhl@gmail.com @AndreyHihlovskiy