p2, your savior or your achilles heel? everything an eclipse team needs to know about p2

24
p2, your savior or your Achilles heel? Everything an Eclipse team needs to know about p2! R. Ian Bull Pascal Rapicault

Upload: irbull

Post on 25-May-2015

6.466 views

Category:

Documents


1 download

DESCRIPTION

p2, 10 common pitfalls and how to avoid them

TRANSCRIPT

Page 1: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

p2, your savior

or your Achilles

heel?

Everything an

Eclipse team

needs to know

about p2! R. Ian Bull

Pascal Rapicault

Page 2: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 3: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#1

Move / remove files on disk

Leading cause of p2 failures:

developers tampering with plugins/ folder

If you no longer need a plugin DO NOT

REMOVE IT BY HAND

Do not move, unzip or change a plug-in in

your plugins/ directory

3/21/2011 3

Page 4: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 5: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#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

Page 6: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 7: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#3

Replace 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

Page 8: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 9: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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}/inputRepositories

transformedRepoLocation=${buildDirectory}/transformedRepo

Page 10: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#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

Page 11: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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 SDK http://wiki.eclipse.org/Eclipse_Project_Update_Sites

3/21/2011 11

Page 12: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#5

Don’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

Page 13: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 14: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#6

Ignore 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

Page 15: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 16: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#7

Don’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

Page 17: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 18: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#8 Use 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

Page 19: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

-metadataRepository file:///repo

-artifactRepository file:///repo

-source http://foo/site.xml

-compress

-publishArtifacts

3/21/2011 19

Page 20: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#9 Use 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

Page 21: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

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

Page 22: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

#10 Spell it P2

I don’t call your project Mylin, έMF, or BERT

3/21/2011 22

Page 23: p2, your savior or your achilles heel? Everything an Eclipse team needs to know about p2

Remember:

The project is:

3/21/2011 23