SlideShare ist ein Scribd-Unternehmen logo
1 von 24
p2, your savior or your Achilles heel? Everything an Eclipse team needs to know about p2! R. Ian Bull Pascal Rapicault
Alternate Titles 10 reasons we closed your p2 bugs as INVALID? 10 ways to get booted from the p2 mailing list! 10 excuses why we didn’t buy you a beer  p2, 10 common pitfalls and how to avoid them. 3/21/2011 2
#1Move / remove files on disk Leading cause of p2 failures: developers tampering with plugins/ folder If you no longer need a pluginDO NOT REMOVE IT BY HAND Do not move, unzip or change a plug-in in your plugins/ directory 3/21/2011 3
Instead:Let p2 manage your install Other plug-ins may depend on it If a plug-in is no longer needed, p2 will remove it Run the Garbage Collector manually if you want # ./eclipse  –application org.eclipse.equinox.p2.garbagecollector.application 3/21/2011 4
#2 Unzip your plug-ins over Eclipse Do you provide a zip file for your plugins? Do you instruct your users to unzip over eclipse We don’t like you! (And we will sabotage your wiki page  ) 3/21/2011 5
Instead:Provide a repository Repositories can be zipped and downloaded! Users can simply point to the compressed repository to properly install your plug-in Avoid the use of drop-ins too 3/21/2011 6
#3Replace published content Never publish different content with the same version number! Do not make a change and use the same version number Do not build plug-ins as Foo v1.0.0.HEAD You’ll never know what your user runs. 3/21/2011 7
Remember: Version / ID pairs are immutable If the Version / ID has not changed, the content hasn’t changed! Always publish new metadata and artifacts for each code change Use .qualifiers for all bundles / plug-ins and features If you can’t rebuild everything, provide patches to deliver surgical updates 3/21/2011 8
Reuse:Tips and Tricks Context repositories Qualifier replacement / bundle reuse forceContextQualifier: Replaces the qualifier of all your bundles (use build timestamp) Feature patches: http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/project_wizards/new_feature_patch.htm (or google: eclipse p2 feature patch)  3/21/2011 9 build.properties:repoBaseLocation=${buildDirectory}/inputRepositoriestransformedRepoLocation=${buildDirectory}/transformedRepo
#4 Alter a released repository “Release” repositories are serious stuffs! People will refer to them from their repo to avoid duplicating your content People will refer to them from their build Removing content from a “release” repo is a felony! 3/21/2011 10
Instead:Be mindful of your users / repos Preserve content at the same URL If you put out bad bytes, publish a new version. Don’t remove the old one !  Append new version to existing repo. Disk is cheap, users not patient (and they’ll blame p2). For this, use p2 composite repositories. Define clear retention policies For example, the policies for the SDKhttp://wiki.eclipse.org/Eclipse_Project_Update_Sites 3/21/2011 11
#5Don’t categorize things p2 only shows what’s been categorized Repository designers are responsible for designing their categories Classic consumer / producer problem 3/21/2011 12
Remember:Category tricks Use categories ! The category publisher is here to help Use composite repositories where one of the repo carry the categories Use meaningful name, and use the description. The feature name is shorter than a tweet. 3/21/2011 13
#6Ignore your version ranges Specify a strict dependency on 3.6.1 and wonder why your users can’t install on 3.6.2? Most illegible p2 error messages are a result of poorly set version ranges 3/21/2011 14
Instead:Consider your version ranges  Version your packages, bundles and features Use version ranges for dependencies: Up-to by not including [3.6.0, 3.7.0)  Unbounded lower [0.0.0, 3.7.0) Unbounded higher 2.0 Strict Versions [3.6.1, 3.6.1] You need to know what the producer does.  3/21/2011 15
#7Don’t USE API If you find yourself reaching into internals, ask yourself why? If you manually write to the bundles.info file, ask yourself why? If you edit content.xml / artifacts.xml by hand, ask yourself why? Two problems when you don’t use API: We could break you You could break you 3/21/2011 16
Instead:Be mindful of what you use Look for provisional API (if real API doesn’t exist) Ask on the p2-mailing list 3/21/2011 17
#8Use the Metadata generator If you are using the Metadata generator… sorry  	(org.eclipse.equinox.p2.metadata.generator) Deprecated two years ago Removed for Indigo 3/21/2011 18
Instead:Use the Publisher Publisher Applications & Ant Tasks Publish from an Update Site Publish from Features / Bundles Publish from a Product Publish categories # ./eclipse -application org.eclipse.equinox.p2.publisher.UpdateSitePublisher -metadataRepositoryfile:///repo -artifactRepository  file:///repo-source http://foo/site.xml-compress-publishArtifacts 3/21/2011 19
#9Use legacy update sites Legacy update sites don’t include complete metadata Features are downloaded before any dependency resolution can occur Big lag at install time. We will blame you for all p2’s performance problems  3/21/2011 20
Instead:Use a real build tool  PDE Build, Tycho and derivatives (Athena, Buckminster, etc.) all provide facilities to build p2 repositories. If you can’t change your build technology, at lease use the Update Site Publisher. 3/21/2011 21
#10Spell it P2  I don’t call your project Mylin, έMF, or BERT 3/21/2011 22
Remember:The project is: p2 3/21/2011 23
Useful links http://wiki.eclipse.org/Equinox_p2 http://wiki.eclipse.org/Equinox/p2/Getting_Started http://wiki.eclipse.org/Equinox/p2/Publisher http://aniefer.blogspot.com/2008/06/example-headless-build-for-rcp-product.html 3/21/2011 24

Weitere ähnliche Inhalte

Was ist angesagt?

Maven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafeMaven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafe
Holasz Kati
 

Was ist angesagt? (20)

DNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostDNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance Boost
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Maven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafeMaven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafe
 
Maven
MavenMaven
Maven
 
Managed Beans: When, Why and How
Managed Beans: When, Why and HowManaged Beans: When, Why and How
Managed Beans: When, Why and How
 
Tycho Tutorial EclipseCon 2013
Tycho Tutorial EclipseCon 2013Tycho Tutorial EclipseCon 2013
Tycho Tutorial EclipseCon 2013
 
Practice of Android Reverse Engineering
Practice of Android Reverse EngineeringPractice of Android Reverse Engineering
Practice of Android Reverse Engineering
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Aleksandr Kutsan "Managing Dependencies in C++"
Aleksandr Kutsan "Managing Dependencies in C++"Aleksandr Kutsan "Managing Dependencies in C++"
Aleksandr Kutsan "Managing Dependencies in C++"
 
What's new in p2 (2009)?
What's new in p2 (2009)?What's new in p2 (2009)?
What's new in p2 (2009)?
 
Maven basics
Maven basicsMaven basics
Maven basics
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 
Learning Maven by Example
Learning Maven by ExampleLearning Maven by Example
Learning Maven by Example
 
Maven 2 Introduction
Maven 2 IntroductionMaven 2 Introduction
Maven 2 Introduction
 
Maven 2 features
Maven 2 featuresMaven 2 features
Maven 2 features
 
Dr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentDr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin development
 
Composer for Magento 1.x and Magento 2
Composer for Magento 1.x and Magento 2Composer for Magento 1.x and Magento 2
Composer for Magento 1.x and Magento 2
 
Becoming A Plumber: Building Deployment Pipelines - LISA17
Becoming A Plumber: Building Deployment Pipelines - LISA17Becoming A Plumber: Building Deployment Pipelines - LISA17
Becoming A Plumber: Building Deployment Pipelines - LISA17
 
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
 

Ähnlich wie Do's and Do not's about p2

Implementing xpages extension library
Implementing xpages extension libraryImplementing xpages extension library
Implementing xpages extension library
dominion
 
Vipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentationVipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentation
Vipul Divyanshu
 
Making%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20WindowsMaking%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20Windows
tutorialsruby
 
Making%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20WindowsMaking%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20Windows
tutorialsruby
 
1) workbench basics
1) workbench basics1) workbench basics
1) workbench basics
techbed
 

Ähnlich wie Do's and Do not's about p2 (20)

Digital Fabrication Studio v.0.2: Information
Digital Fabrication Studio v.0.2: InformationDigital Fabrication Studio v.0.2: Information
Digital Fabrication Studio v.0.2: Information
 
Version Control Training - First Lego League
Version Control Training - First Lego LeagueVersion Control Training - First Lego League
Version Control Training - First Lego League
 
SVN Basics
SVN BasicsSVN Basics
SVN Basics
 
Maven: Managing Software Projects for Repeatable Results
Maven: Managing Software Projects for Repeatable ResultsMaven: Managing Software Projects for Repeatable Results
Maven: Managing Software Projects for Repeatable Results
 
Implementing xpages extension library
Implementing xpages extension libraryImplementing xpages extension library
Implementing xpages extension library
 
Vipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentationVipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentation
 
7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users
 
Using svn
Using svnUsing svn
Using svn
 
05 IPT Installation Webinar - Common issues and how to get help
05 IPT Installation Webinar - Common issues and how to get help05 IPT Installation Webinar - Common issues and how to get help
05 IPT Installation Webinar - Common issues and how to get help
 
Making%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20WindowsMaking%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20Windows
 
Making%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20WindowsMaking%20R%20Packages%20Under%20Windows
Making%20R%20Packages%20Under%20Windows
 
Mining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesMining Component Repositories for Installability Issues
Mining Component Repositories for Installability Issues
 
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie..."How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
 
Reusable Apps
Reusable AppsReusable Apps
Reusable Apps
 
So. many. vulnerabilities. Why are containers such a mess and what to do abou...
So. many. vulnerabilities. Why are containers such a mess and what to do abou...So. many. vulnerabilities. Why are containers such a mess and what to do abou...
So. many. vulnerabilities. Why are containers such a mess and what to do abou...
 
Django Best Practices
Django Best PracticesDjango Best Practices
Django Best Practices
 
Digital Fabrication Studio.02 _Information @ Aalto Media Factory
Digital Fabrication Studio.02 _Information @ Aalto Media FactoryDigital Fabrication Studio.02 _Information @ Aalto Media Factory
Digital Fabrication Studio.02 _Information @ Aalto Media Factory
 
1) workbench basics
1) workbench basics1) workbench basics
1) workbench basics
 
The dependency inversion principle
The dependency inversion principleThe dependency inversion principle
The dependency inversion principle
 
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
 

Kürzlich hochgeladen

Kürzlich hochgeladen (20)

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

Do's and Do not's about p2

  • 1. p2, your savior or your Achilles heel? Everything an Eclipse team needs to know about p2! R. Ian Bull Pascal Rapicault
  • 2. Alternate Titles 10 reasons we closed your p2 bugs as INVALID? 10 ways to get booted from the p2 mailing list! 10 excuses why we didn’t buy you a beer  p2, 10 common pitfalls and how to avoid them. 3/21/2011 2
  • 3. #1Move / remove files on disk Leading cause of p2 failures: developers tampering with plugins/ folder If you no longer need a pluginDO NOT REMOVE IT BY HAND Do not move, unzip or change a plug-in in your plugins/ directory 3/21/2011 3
  • 4. Instead:Let p2 manage your install Other plug-ins may depend on it If a plug-in is no longer needed, p2 will remove it Run the Garbage Collector manually if you want # ./eclipse –application org.eclipse.equinox.p2.garbagecollector.application 3/21/2011 4
  • 5. #2 Unzip your plug-ins over Eclipse Do you provide a zip file for your plugins? Do you instruct your users to unzip over eclipse We don’t like you! (And we will sabotage your wiki page  ) 3/21/2011 5
  • 6. Instead:Provide a repository Repositories can be zipped and downloaded! Users can simply point to the compressed repository to properly install your plug-in Avoid the use of drop-ins too 3/21/2011 6
  • 7. #3Replace published content Never publish different content with the same version number! Do not make a change and use the same version number Do not build plug-ins as Foo v1.0.0.HEAD You’ll never know what your user runs. 3/21/2011 7
  • 8. Remember: Version / ID pairs are immutable If the Version / ID has not changed, the content hasn’t changed! Always publish new metadata and artifacts for each code change Use .qualifiers for all bundles / plug-ins and features If you can’t rebuild everything, provide patches to deliver surgical updates 3/21/2011 8
  • 9. Reuse:Tips and Tricks Context repositories Qualifier replacement / bundle reuse forceContextQualifier: Replaces the qualifier of all your bundles (use build timestamp) Feature patches: http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/project_wizards/new_feature_patch.htm (or google: eclipse p2 feature patch)  3/21/2011 9 build.properties:repoBaseLocation=${buildDirectory}/inputRepositoriestransformedRepoLocation=${buildDirectory}/transformedRepo
  • 10. #4 Alter a released repository “Release” repositories are serious stuffs! People will refer to them from their repo to avoid duplicating your content People will refer to them from their build Removing content from a “release” repo is a felony! 3/21/2011 10
  • 11. Instead:Be mindful of your users / repos Preserve content at the same URL If you put out bad bytes, publish a new version. Don’t remove the old one ! Append new version to existing repo. Disk is cheap, users not patient (and they’ll blame p2). For this, use p2 composite repositories. Define clear retention policies For example, the policies for the SDKhttp://wiki.eclipse.org/Eclipse_Project_Update_Sites 3/21/2011 11
  • 12. #5Don’t categorize things p2 only shows what’s been categorized Repository designers are responsible for designing their categories Classic consumer / producer problem 3/21/2011 12
  • 13. Remember:Category tricks Use categories ! The category publisher is here to help Use composite repositories where one of the repo carry the categories Use meaningful name, and use the description. The feature name is shorter than a tweet. 3/21/2011 13
  • 14. #6Ignore your version ranges Specify a strict dependency on 3.6.1 and wonder why your users can’t install on 3.6.2? Most illegible p2 error messages are a result of poorly set version ranges 3/21/2011 14
  • 15. Instead:Consider your version ranges Version your packages, bundles and features Use version ranges for dependencies: Up-to by not including [3.6.0, 3.7.0) Unbounded lower [0.0.0, 3.7.0) Unbounded higher 2.0 Strict Versions [3.6.1, 3.6.1] You need to know what the producer does. 3/21/2011 15
  • 16. #7Don’t USE API If you find yourself reaching into internals, ask yourself why? If you manually write to the bundles.info file, ask yourself why? If you edit content.xml / artifacts.xml by hand, ask yourself why? Two problems when you don’t use API: We could break you You could break you 3/21/2011 16
  • 17. Instead:Be mindful of what you use Look for provisional API (if real API doesn’t exist) Ask on the p2-mailing list 3/21/2011 17
  • 18. #8Use the Metadata generator If you are using the Metadata generator… sorry  (org.eclipse.equinox.p2.metadata.generator) Deprecated two years ago Removed for Indigo 3/21/2011 18
  • 19. Instead:Use the Publisher Publisher Applications & Ant Tasks Publish from an Update Site Publish from Features / Bundles Publish from a Product Publish categories # ./eclipse -application org.eclipse.equinox.p2.publisher.UpdateSitePublisher -metadataRepositoryfile:///repo -artifactRepository file:///repo-source http://foo/site.xml-compress-publishArtifacts 3/21/2011 19
  • 20. #9Use legacy update sites Legacy update sites don’t include complete metadata Features are downloaded before any dependency resolution can occur Big lag at install time. We will blame you for all p2’s performance problems  3/21/2011 20
  • 21. Instead:Use a real build tool PDE Build, Tycho and derivatives (Athena, Buckminster, etc.) all provide facilities to build p2 repositories. If you can’t change your build technology, at lease use the Update Site Publisher. 3/21/2011 21
  • 22. #10Spell it P2  I don’t call your project Mylin, έMF, or BERT 3/21/2011 22
  • 23. Remember:The project is: p2 3/21/2011 23
  • 24. Useful links http://wiki.eclipse.org/Equinox_p2 http://wiki.eclipse.org/Equinox/p2/Getting_Started http://wiki.eclipse.org/Equinox/p2/Publisher http://aniefer.blogspot.com/2008/06/example-headless-build-for-rcp-product.html 3/21/2011 24