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

Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 

Recently uploaded (20)

Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 

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