Building a plug-in is the fun part: You get to write code and create the tool you want. That plug-in can then be used in an Eclipse run-time environment by simply copying the plug-in into an existing \plugins directory for Eclipse or an Eclipse-based product. When Eclipse is launched, the plug-in will be found, and if it passes platform startup processing, it will be available in the run-time configuration.
But who knows or cares that your plug-in joined the party? Will users understand what your tool has to offer? Will they be able to use Eclipse to disable, service, or otherwise manage your contribution? Absolutely not. A plug-in on its own is just a plug-in, not a tool contribution fully integrated with the Eclipse Platform.
A plug-in gets unruly without a feature. Or, to use the common parlance, a plug-in without a feature is an unmanaged plug-in. Eclipse Platform startup includes a configuration step. If a new plug-in is copied into the \plugins directory or otherwise made known to Eclipse at startup, the configuration step notices, but only lets you know by flashing the splash image twice. Eclipse notices the new plug-in because the configuration check sum stored in the \.metadata\.config\platform.cfg file for the current workspace is different. A splash-flash is all Eclipse can do since you have not provided a feature with which the platform can guide the user through a configuration modification. By packaging your plug-ins into a feature (or two), you get the opportunity to:
- List the prerequisites of your contribution (in the feature.xml file) for use during Eclipse configuration processing.
- Manage your contribution as part of the active Eclipse configuration.
- Contribute branding information to identify your contribution to those using the run-time environment and a welcome page telling users what your feature offers (in the welcome.xml file associated with your feature).
- Potentially service your contribution using the Eclipse update manager.
Don't wait until the end of your plug-in development task to add feature packaging. Design decisions reflected in feature definitions could influence how you structure your plug-ins. For example, most Eclipse contributions have UI and core (non-UI) features. If your plug-ins are not segmented this way, you might want to consider reworking them a bit now. Features can also be used to automate build processing for the referenced plug-ins.
Primary feature brands the product (but you have control)
There are many features, but only one is in control when you start Eclipse. This primary feature identifies product branding and other run-time behavior. This includes identifying the name and associated graphics for the run-time platform as well as the option of redefining the default preferences for all plug-ins. As you will see in Defining your own global preferences, this can be a powerful option you can use to customize your own Eclipse installation.
Features build plug-ins (if you let them)
The PDE will automate large portions of the tasks to prepare feature and
plug-in content for a full run-time environment. See the discussion in the
Eclipse.org article "PDE Does Plug-ins" (see Resources). The basic steps are also documented in The Java
Developer's Guide to Eclipse (see Resources) as an exercise you can follow to build and brand your
existing plug-ins. Suffice it to say that if you have a feature and
understand how the PDE will help you build plug-ins and features, you can
build a feature and have it build all associated plug-ins at the same
time. Build control strategies (bin.excludes
vs. bin.includes) are discussed in Strategies for building features using the
PDE. These strategies supplement what you can learn from the
Eclipse.org article and The Java Developer's Guide to Eclipse.
Platform configuration management
To understand the need for features, it helps to understand how they manage the content available in the active configuration.
Given a fresh unzip of the Eclipse Platform, the following happens when
you start the eclipse.exe:
- A Java™ runtime environment (JRE) is found. By default, Eclipse
first looks for one in the eclipse\jre subdirectory. If it's not found
there, Eclipse looks for one known to the operating system.
Note: The-vm dir-locationargument can always be used to identify an alternative JRE. - A configuration is created as part of the new workspace. New workspaces typically have no configuration, which is why you see an image that says "Completing the install" before the true splash image.
- The features and plug-ins known to Eclipse are processed, and check sums are created to detect changes in the future. This includes features and plug-ins in the current eclipse\features and eclipse\plugins directories along with the eclipse\... directory structures identified by link files.
If a workspace already exists, it will include a configuration in the .metadata\.config\platform.cfg file.
If you manage your Eclipse install like a formally installed product, you
would establish a default initial configuration in the eclipse\.config
directory by running the eclipse -initialize
command. This allows Eclipse to start up without the Completing the
install image when using a new workspace.
Once Eclipse starts, the .metadata\.config\platform.cfg file will contain the active configuration definition.
How link files extend an Eclipse installation
If you have been using Eclipse for a while or added even one new plug-in to your configuration, you know that Eclipse looks for features and plug-ins in the eclipse\features and eclipse\plugins directories. Did you know that Eclipse will also look elsewhere on the file system? If well formatted link files exist in the eclipse\links directory, these will be processed and the associated features and plug-ins (including plug-ins without referencing features) will be available in the run-time configuration.
A link file is simply any file named id.link, where id is customarily the ID of the root feature being referenced. You can still place more than one feature in the link file target, and names such as foo.link work just fine. Given a link file with this content:
path=E:/Eclipse-2.1.1/installedFeatures/Examples
Eclipse will look in the identified directory for eclipse\features and eclipse\plugins directories that have valid feature or plug-in contributions. That is, the target directory must contain an \eclipse directory. If found, the additional features and plug-ins are available in the run-time configuration or processed as new configuration changes if the link file was added after a workspace was created.
A strategy for the use of link files to customize your own Eclipse installation is discussed in Using link files to manage an Eclipse install.
Configuration updates — Adding a feature
If a new feature with referenced plug-in(s) is added to the existing \features and \plugins directories, or made known to Eclipse with a link file, the check sum change triggers configuration processing. This processing goes beyond a simple splash-flash. The new feature is processed as a configuration change and the Configuration Changes dialog is shown.
For example, the dialog in Figure 1 would be shown if you had opened a workspace with the standard Eclipse unzip and later found the Eclipse Examples and either unzipped them into the same directory tree as Eclipse or added a link file to point to where the examples were unzipped.
Figure 1. Configuration Changes dialog
So, if you see a dialog like this, it is because you, an install program you ran, or someone else has modified the Eclipse installation so new or updated features are available. If the entries can be selected, you can add the change to the current configuration. If the entries are disabled, there is a configuration problem blocking the addition of the new feature. The Error Details button provides information on the configuration issue.
Configuration management notes:
- Just because there are changes pending does not mean you have to
accept them now. You can leave the changes as pending for quite some
time. Just deselect the entry and click Finish. To add them
later, use the menu option Help > Software Updates > Pending
Changes... to open the dialog again.
- Changes that have been accepted can later be disabled. Open the Install/Update perspective, then select the feature in the Install Configuration view and select Disable in the Preview view. Disabled features can be enabled again later using the same process. To see disabled features in the Install Configuration view, select the Show Disabled Features toggle.
Feature branding identifies your contributions at run time
Eclipse allows branding for the active product and optionally for each feature included in the run-time configuration. Features do not need to be branded, and you may choose to not brand all of your features, but you should brand at least one.
Branding definitions — The job of a plug-in
The trick for adding branding is knowing where to place the definitions.
You brand features, but the branding content is provided by a plug-in.
This is either the plug-in with the same ID as the feature (default
processing) or the plug-in identified in the feature definition (option in
Eclipse V2.1.1). A feature definition in Eclipse V2.1 can define an
alternate plug-in using the plugin=...
attribute in the feature.xml file.
The plug-in contains both the files used to define and provide branding content.
The about.ini control file defines branding content for both product- and feature-level branding. For product branding, two things must be true:
- The feature must be defined as a possible primary feature. This means
that it contains
primary="true"in the feature.xml definition. - The feature must be identified as the active primary feature. This is
typically done in a product using the entry in the install.ini file in
the \eclipse directory. The primary feature can also be defined at
runtime using the
-feature featureIdstartup parameter.
The easiest way to understand feature branding is to see what elements are defined in the about.ini control file and where they go in a branded product or feature (see Figure 2).
Figure 2. Branding content available in the Eclipse perspective
These entries apply only to product branding:
- windowImage
- appName
- aboutImage
The remaining entries are used during both product and feature branding.
Values preceded by a percent sign (%) are
resolved in the about.properties file. The text defined using the
aboutText key is available on the About
product
dialog when the feature is the active primary feature. This text is
also shown for any feature when selected in the About Features
dialog that can be opened using the Feature Details button.
The welcomePage identified by the welcomePage
entry is opened when the feature is initially added to the run-time
configuration and can always be found later using the Welcome
selection dialog opened using the Help > Welcome... menu option
in Eclipse.
The quickest way to build a working branded feature is to clone the
entries found in Eclipse itself. The feature and plug-in with the ID
org.eclipse.platform provides feature and
plug-in branding. A step-by-step guide is also included in "Chapter 34,
Exercise 7 of The Java Developer's Guide to Eclipse.
You can find additional detail on branding on Eclipse.org in the development resources for the Update Manager subproject (see Resources).
Strategies for building features using the PDE
The build process is covered in the chapters on feature development in The Java Developer's Guide to Eclipse and the Eclipse.org article "PDE Does Plug-ins", but there are some other considerations, as well. Once you understand how to use the PDE to build features and their referenced plug-ins, you can automate the process.
Ant targets implemented by the PDE
Let’s begin with a summary of the function provided by the PDE. The PDE will generate build.xml files for a plugin.xml or feature.xml file. The build.xml is an Ant script that can perform different types of tasks required to prepare a plug-in or feature for the run-time platform. PDE build processing allows you to perform one or more of the following build targets for a feature or plug-in.
Feature build targets of interest:
- build.jars calls the build.jars task in the build.xml file for each referenced plug-in.
- build.update.jar calls the build.update.jar task in the build.xml file for each referenced plug-in. It also creates an Update JAR for the feature. This is the default target for the Ant script.
- build.sources calls the build.sources task in the build.xml file for each referenced plug-in.
- zip.distribution creates a ZIP file of all the files required for the feature and referenced plug-ins.
- refresh tells Eclipse to refresh the feature project and the project for any referenced plug-in.
Plug-in build targets of interest:
- build.jars calls a number of targets in the build.xml file for each run-time JAR defined for the plug-in. The called target names are the same as run-time JAR file names. These targets compile the Java code and create the JAR file that includes any resources kept in the source folder.
- build.update.jar zips all the files required in the run-time plug-in directory into a file named plugin.id_version.jar, where plugin.id and version are from the plugin.xml file. This is the default target for the Ant script.
- build.sources creates a ZIP file of the Java source based on the source folders defined for a given run-time JAR file.
- zip.plugin creates a ZIP file containing all the elements for the plug-in.
- refresh tells Eclipse to refresh the plug-in project.
Note: In feature and plug-in Ant processing, the files packaged
during update JAR or ZIP processing are those required in the run-time
environment. These are described in the
bin.includes or
bin.excludes entries in the build.properties
file for the feature or plug-in and the runtime JAR files for each plug-in
as defined in the plugin.xml.
To build a plug-in, you might say
clean, build.sources, build.jars, zip.plugin, refresh.
To build a feature, you could say
clean, build.sources, build.jars, zip.distribution, refresh.
You want to start with clean to force all parts
to be recreated. This is often required. While Ant processing will rerun
many of the required steps based on changes in the input, some changes do
not trigger all the required processing. Testing shows that if you change
one Java source file, the corresponding source ZIP will be updated, but
the class will not be compiled and the run-time JAR will not be updated.
This suggests that it is safer to clean the build outputs first so you
know you are using the run-time version of the current source.
For discussion purposes, let’s describe the content for just one feature and plug-in that is necessary in the run-time configuration.
Table 1. Contribution structure example
| Contribution type | Files |
|---|---|
| Feature | feature.xml |
| feature_image.jpg | |
| /license/license.html | |
| /license/license.pdf | |
| /plan/project-plan.doc | |
| Plug-in | plugin.xml |
| /images/action.gif | |
| /images/editor.gif | |
| /src/co/pkg/id/action.java | |
| /src/co/pkg/id/editor.java | |
| /design-docs/plug-in.doc | |
| /design-docs/editor.doc |
As you can see by the files names, while most belong in the run-time environment, others probably should not be included in what you share with others (for example, your design documents).
Include strategy — Identify the required bits
The easiest approach, at least initially, is to just list everything you want to package during build processing as part of your feature or plug-in in the run-time configuration. The build.properties file for each is shown below:
Table 2. build.properties content
| Component | build.properties file content |
|---|---|
| Feature | bin.includes = feature.xml,\ license/ |
| Plug-in | source.runtime.jar = src/ bin.includes = plugin.xml,\ images/ |
Exclude strategy — Identify the bits that are not required or private
An alternative approach is to list what you don't want to package as part of the feature or plug-in during build processing. This must include not only what you don't want to share but also the files and directories created by build processing (some of which are temporary). The build.properties file for this approach are shown below:
Table 3. build.properties content
| Component | build.properties file content |
|---|---|
| Feature | bin.excludes = temp.folder/,\ com.ibm.master.lab.core_1.0.0.bin.dist.zip,\ .classpath,\ .project,\ build.xml,\ build.properties |
| Plug-in | bin.excludes = temp.folder/,\ bin/,\ .classpath,\ .project,\ build.xml,\ build.properties,\ makesrczip.xml,\ src/ |
Given a feature or plug-in id value of
com.your.feature.id or
com.your.plugin.id, you may also need to
include entries such as these when using an exclude strategy:
com.your.feature.id_1.0.0.bin.dist.zip,\ |
The ZIP entry will keep the distribution ZIP from being included in either an update JAR or the distribution zip itself. The JAR entries will keep the update JAR for a feature or plug-in from being included in the distribution ZIP or the update JAR itself.
An indication of this need is when your distribution ZIP or update JAR seems larger that it should be, or keeps jumping in size, every time you run the build process. These entries would go in the appropriate feature or plug-in build.properties file.
Reaction to file or structure change
Given the options described, there are still considerations for the reaction required when a new file or folder has been added to the feature or plug-in. Let’s say you prepare your feature and plug-in for possible translation; this means you need a feature.properties and plugin.properties file for each. You would need to add a reference to the appropriate .properties file when using an include strategy, but no change would be required with an exclude strategy.
Each approach is consistent in that if you add a file to a directory, no change is required. The new file will be sent for an include approach and not sent for an exclude strategy. This is really an indication of why you might consider using specific directories for different types of files. For example, an images directory for all images used by your plug-in would be included, and a design directory for any design discussion or documentation you care to keep with the plug-in during development would be excluded.
The worst-case scenario when you forget to make a build.properties update: run-time failure or inappropriate content delivery. If you add a new file or directory when using an include strategy, it will not be available after packaging, which might cause your plug-in to fail or display the Eclipse default image (red box). If you add new file or directory when using an exclude strategy, the file or directory content will be included during packaging. Choose the approach that fits your style and offers the least risk when you forget to make an update. The choice will be based on what bothers you more: a feature or plug-in that does not run, or files in the run-time directories that others should not have seen.
When developing your tool, do you consider how many plug-ins are required? The short answer could be three: One for your model or non-UI core, one for your UI content, and one or more for any help content that is provided. If you look, you will see this basic pattern repeated in Eclipse itself (jdt.core, jdt.ui, jdt.doc; debug.core, debug.ui; and so on).
One reason for making this separation is that the plug-ins that contribute
UI content require different portions of Eclipse at run time than plug-ins
that do not contribute UI content
(org.eclipse.ui).
Features, unless included by another feature, are configured as root
features in an Eclipse configuration. By default, a root feature can be
disabled or enabled by the user in the Install/Update perspective and can
identify an update URL in the feature.xml file. Unless specifically
permitted by a search-location definition when
including a feature, only the update URL in the root feature will be
processed.
By including features, you manage the structure of your package. You may
also have multiple features but only brand one; the others provide
structure or otherwise manage the contribution. Remember that the root
feature defines the update site, although this role can be delegated to an
included feature by the feature that includes it when the
search-location attribute is used with a value
of self
both.
If you were building an Eclipse-based product, you would probably want one
of your features to include the Eclipse feature tree. This is not required
to perform product branding, but would allow you to either identify an
alternate update site (Eclipse itself uses
http://update.eclipse.org/updates ), or disable
Web-based updates by not identifying an update site at all. This would
ensure that the Eclipse base for your product was not updated until you
packaged such updates along with your own.
When including a feature in another feature, you have the option of identifying the feature as optional. The primary reason for creating this structure is to allow portions of your contribution to be disabled by the user at his request.
The configuration logic for Eclipse does not allow a new feature to be added if it has included optional features that are not present. In other words, attempt to use optional features as way of creating layers that would be available if the appropriate prerequisites are present. Instead, keep these layers in different directory trees and use individual link files for each. There is no limit to how many link files you use to add function to an Eclipse configuration.
Making Eclipse (or any Eclipse-based product) work your way
You now know two things: The identified primary feature controls the world of product branding and preference defaults, and Eclipse sees contributions in the install directory or any linked Eclipse directory structure. This means you can make changes (with the associated risk, which just means be careful). These changes can enhance how you manage your Eclipse-based installation and make it support your rules for favorite preferences.
Using link files to manage an Eclipse install
You might want to consider a more managed environment instead of just dumping all the cool plug-ins (with referencing features I hope) into your Eclipse directory tree. If you need to update Eclipse, you really don't want to either unzip a new Eclipse on top or hunt through the list of features and plug-ins to find those you want to move forward.
Here is an approach for organizing your Eclipse or Eclipse-based product and builds on the capabilities of link files:
- Keep Eclipse or an Eclipse-based product clean. That is, don't add any of your features or plug-ins to the eclipse\features and eclipse\plugins directories.
- Create both an eclipse\links and eclipse\links-out directory in the existing Eclipse directory. If you are using an Eclipse-based product, the eclipse\links directory may already exist. The directory is not special, just a convenient place to hide link files when not in use.
- Create a one or more add-ons directories for the features and plug-ins you want to add to your configuration. In these directories, create an eclipse\features and eclipse\plugins directory structure.
- For each add-ons directory, create a link file in the eclipse\links-out directory. Copy those you currently want as part of your active configuration to the eclipse\links directory.
For example, assume you unzipped Eclipse into a directory named Eclipse-2.1.1, then created an add-ons directory named CoolTools, also in the Eclipse-2.1.1directory. In the CoolTools directory, you could have multiple directories, one for each tool or family of tools you want to add to Eclipse. Your structure might look something like Figure 3.
Figure 3. Eclipse directory structure for link files
The EditorList.link file would contain either of these entries (not both):
path=D:/Eclipse-2.1.1/CoolTools/EditorList
path=D:\\Eclipse-2.1.1\\CoolTools\\EditorList
The slash is either one (/) or two
(\\) depending on direction.
Be sure that the entry does not end with a space as this causes it to be ignored by Eclipse — it took me several hours to determine this the first time I used link files.
If you start Eclipse with a new workspace, all of Eclipse and the features and plug-ins found via link files will be available. If you were to add a link file and restart Eclipse using an existing workspace, the Configuration Changes dialog would be shown. If you remove a link file (as easy as moving it over to \links-out), the configuration change will be noted, but all you will see is a splash-flash.
You don't really have to move link files in and out to control the configuration; a better way is to just adjust the configuration using the Install/Update perspective. Of course, this assumes you have features for the plug-ins (see, another reason for features). Making configuration adjustments using Eclipse is discussed next.
Making configuration modifications using the Install/Update perspective
Root features and any feature defined as optional can be disabled in the current configuration. Once disabled, the features are still known to the platform; they are just not included in the current run-time configuration.
Previously, we discussed adding the Eclipse Examples to the active configuration. Once there, we can choose to disable them using the Install/Update perspective. If you were to open the Install/Update perspective for an Eclipse configuration that included the Eclipse Examples, you would see something like Figure 4.
Figure 4. Eclipse Examples feature in Install/Update perspective
By selecting the Disable Now button in the Preview view, you can temporarily remove the Eclipse Examples feature from the run-time configuration. When selected, Eclipse will prompt you to restart the Platform to process the configuration modification.
The Eclipse Examples feature will no longer be visible (or active) in the current configuration. To see the feature so that you can enable it again, you need to select the Show Disabled Features toggle in the Install Configuration view (see Figure 5).
Figure 5. Disabled Eclipse Examples feature in Install/Update perspective
This works for the Eclipse Example feature because it is a root feature. If you explore the other features in the Eclipse SDK, you will see that they do not include a Disable Now button in the Preview view. This is because they are defined as required.
If you are using the Eclipse SDK, you have the Platform, the JDT, and the
PDE configured by default. If you do some plug-in development, but you
don't need the PDE — or for that matter, you don't need the JDT all
the time — you could disable these features if you made a small
modification to Eclipse. Open the feature.xml file for the
org.eclipse.platform.sdk.win32 feature and
change these lines to include the
optional="true" attribute:
Listing 1. Disabling the PDE and JDT
<includes id="org.eclipse.platform.win32" version="2.1.1" match="equivalent"/>
<includes id="org.eclipse.jdt" version="2.1.1" match="equivalent" optional="true"/>
<includes id="org.eclipse.pde" version="2.1.0" match="equivalent" optional="true"/>
<includes id="org.eclipse.platform.win32.source" version="2.1.1" match="equivalent"
optional="true"/>
<includes id="org.eclipse.jdt.source" version="2.1.1" match="equivalent" optional="true"/>
|
You can now select these features in the Install Configuration view and disable them. If all of those defined optional above were disabled, the Platform still runs. And remember, you can always enable them again. Figure 6 shows the Install Configuration view showing which features are disabled.
Figure 6. Multiple disabled Eclipse features
These disable/enable decisions are local to the current workspace. You could have other workspaces active that include some or all of the disabled features.
This simple example should demonstrate the advantages of having features (they can be disabled) and the value of adding all possible features to your configuration using link files. You disable what you don't need for a given workspace and therefore optimize the current configuration.
Defining your own global preferences
Eclipse is good, but like any tool, it will not be perfect for you until you customize it a bit. Tools contribute preference pages that allow you to change the behavior or visual display of a tool. At last count there were 62 preference pages in Eclipse. Almost every time you visit a new one, you find an option you might like to change. But when you use more than one workspace, or work in a team environment where some options may have to be coordinated, this presents a challenge for how to best manage your choices across workspaces and with others.
Eclipse does offer an export/import option for preferences. On any page in the Preferences dialog, you can export preferences to an .epf file. This file can be imported when using another workspace or shared with others. You might even add it to a project shared with teammates so that everyone has access to the standard preference choices.
But this can get tedious, and if you forget, burdensome. There is another technique for defining global preferences that you should be aware of when using Eclipse or any Eclipse-based product. You can customize the default values for preferences by modifying the plugin_customization.ini file associated to the primary feature.
You find the primary feature by looking at the install.ini file in the eclipse directory. For example, the install.ini content in a standard Eclipse unzip looks like this:
Listing 2. install.ini content in a standard Eclipse unzip
# install.ini
# java.io.Properties file (ISO 8859-1 with "\" escapes)
# This file does not need to be translated.
# Required property "feature.default.id" contains the id of the primary feature
# (the primary feature controls product branding,
splash screens, and plug-in customization)
feature.default.id=org.eclipse.platform
# Required property "feature.default.application" contains id of the core
# application that gets control on startup. For products with a UI, this
# is always org.eclipse.ui.workbench; for "headless"
products, this is product-specific.
feature.default.application=org.eclipse.ui.workbench
|
The feature.default.id=... entry identifies the
default primary feature. Note that another feature could be declared as
primary using the -feature option when starting
Eclipse.
As with much of the feature control and branding process, the actual work
is done in the plug-in associated with the feature. For Eclipse, this is
the plug-in with the same id as the feature, the
org.eclipse.platform plug-in. If you look in
this plug-in, which is the branding plug-in for the primary feature, you
will find a file named plugin_customization.ini. This file can contain
entries similar to those found in an exported preference file. The file is
read when Eclipse starts to identify any default preference values that
should be used instead of those defined by the plug-ins themselves. This
allows products, or you, to change plug-in behavior. The default
plugin_customization.ini file contains only one entry:
Listing 3. Default plugin_customization.ini file
# plugin_customization.ini
# sets default values for plug-in-specific preferences
# keys are qualified by plug-in id
# e.g., com.example.acmeplugin/myproperty=myvalue
# java.io.Properties file (ISO 8859-1 with "\" escapes)
# "%key" are externalized strings defined in plugin_customization.properties
# This file does not need to be translated.
# Property "org.eclipse.ui/defaultPerspectiveId" controls the
# perspective that the workbench opens initially
org.eclipse.ui/defaultPerspectiveId=org.eclipse.ui.resourcePerspective
|
This entry identifies the perspective that is opened for a new workspace or when you have shut down Eclipse after closing all perspectives. This entry might be different if you are using an Eclipse-based product.
The process of identifying which preferences you want to include requires a bit of hunting, but basically you should:
- Start with a fresh workspace.
- Modify a preference value you wish to change.
- Export the preferences to an .epf file.
- Inspect the file to identify new keys and determine if they map to the change you just made.
- Copy one or more of the key entries to the plugin_customization.ini
file in the branding plug-in (this is
org.eclipse.platformwhen using Eclipse). - Test the result and either keep the new key or try again.
Note: If you are not comfortable with updating the product's plugin_customization.ini file, you can always create a copy of the file in another location and use a startup parameter that identifies the file when you start up Eclipse or an Eclipse-based product:
eclipse -plugincustomization myCustomDefaults.ini
|
Example preference overrides are provided here as a demonstration of both the technique described above and suggestions for some values you may wish to include in your own customized plugin_customization.ini file.
We'll look at them in logical chunks based on goals I had for my customization.
- View tabs default to the bottom, but I like them at the top:
# View tabs at the bottom org.eclipse.ui.workbench/VIEW_TAB_POSITION=128
- To not open the welcome pages for a new workspace and to stop the
prompt when closing the workbench:
# No welcome dialog at open and no confirm on close org.eclipse.ui.workbench/WELCOME_DIALOG=false org.eclipse.ui.workbench/EXIT_PROMPT_ON_CLOSE_LAST_WINDOW=false
- To disable the prompt or action to open a perspective known to the
new project wizard:
# Never change to perspective required by new project wizard (no prompt) org.eclipse.ui.workbench/SWITCH_PERSPECTIVE_ON_PROJECT_CREATION=never
- To define an alternate default text font:
# Default text font (leaks into Java editor) # Note: you have to touch the font page and say OK/Apply (probable bug) org.eclipse.ui.workbench/org.eclipse.jface.textfont= 1|Lucida Console|9|1|WINDOWS|1|-15|0|0|0|700|0|0|0|0|3|2|1|49|Lucida Console;
Note: The font preference entry is peculiar. It does not take affect immediately. If you visit the font page, the font defined above is shown, and will be used once you select OK or Apply. I was unable to get the key saved for the Java text font to work.
- To predefine an additional Java editor task tag:
# Add to the default JDT task tags (TODO should probably be left) org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.taskTags=TODO,Edu-Sol
- To set the double-click default for the Package Explorer to be
equivalent to the Go Into action:
# Package Explorer GoInto on Double click org.eclipse.jdt.ui/packageview.doubleclick=packageview.gointo
Some customization is available even when the changes are not preference page-defined options. By glancing at the contents of an exported .epf after making my standard set of UI modifications, I noticed that some JDT decisions were stored as preferences.
- This preference key is used to tell the JDT UI that it does have
preferences to read to change the default UI behavior:
# Tells JDT it does have some prefs to use (forces a read of these values) org.eclipse.jdt.ui/CustomFiltersActionGroup.org.eclipse.jdt.ui.PackageExplorer. TAG_DUMMY_TO_TEST_EXISTENCE=storedViewPreferences
Note: If the above key is missing, the next two sets of entries will not be processed.
- The active Package Explorer filters are stored as preference values:
# Package Explorer filter - standard JDT defaults + library filter org.eclipse.jdt.ui/org.eclipse.jdt.ui.PackageExplorer.LibraryFilter=true org.eclipse.jdt.ui/org.eclipse.jdt.ui.PackageExplorer_patternFilterId_.*=true org.eclipse.jdt.ui/org.eclipse.jdt.ui.PackageExplorer.PackageDeclarationFilter=true org.eclipse.jdt.ui/org.eclipse.jdt.ui.PackageExplorer_patternFilterId_*$*.class=true org.eclipse.jdt.ui/org.eclipse.jdt.internal.ui./ PackageExplorer.EmptyInnerPackageFilter=true
- The Outline view has a display option that reduces the tree depth
when the view is showing content from an active JDT Java editor. The
hover help Go Into Top Level Type is displayed for this toggle.
This preferences entry controls this decision:
# Outline view GoInto Toggle when using JDT editor org.eclipse.jdt.ui/GoIntoTopLevelTypeAction.isChecked=true
You may want to experiment a bit to find more preference keys that you want to identify new defaults for. Use the described process and check the results. You might want to do this with a temporary workspace. When you are satisfied, you can modify the plugin_customization.ini file for the active primary feature (just don't tell anyone I told you to do so!). Also note that you may find other keys that seem to be ignored, as I did, for the font that was to be used by the JDT. This entry, when placed in the plugin_customization.ini file, did not change the preference page at all.
Features are the unsung hero of Eclipse — they are important because they are the unit of Eclipse configuration management, they support product branding, and they are part of how products build customized solutions on top of the Eclipse Platform. Using features you can:
- Identify, based on feature branding, who provided the different functions that are available when you are working with an Eclipse-based product
- Build on product branding capabilities to further customize Eclipse
- Automate tasks in the plug-in development environment
- Dynamically change the configuration for a given workspace by managing the enabled/disabled state of root features, or features included by another but defined as optional, using the Install/Update perspective
So, give features a go, if only to automate some of the plug-in build processing, or to make your own Eclipse environment better by using the customization install/link file structuring approaches covered here.
| Name | Size | Download method |
|---|---|---|
| os-ecfeat/plugin_customization.zip | HTTP |
Information about download methods
Learn
- The Eclipse.org article "PDE Does Plug-ins" offers an alternative description of how to
use the PDE to build plug-ins.
- Download the plugin_ customization.ini file described in this
article.
-
The Java
Developer's Guide to Eclipse,
by Sherry Shavor, Jim D'Anjou, Dan Kehn, Scott Fairbrother, John
Kellerman, and Pat McCarthy (Addison Wesley Professional, 2003). In
particular, see Chapter 22 on developing features, and Chapter 34,
Exercise 7, on feature development and deployment.
- Additional detail on branding is on
Eclipse.org in the development resources for the Update Manager
sub-project.
- "Developing Eclipse plug-ins" walks though a simple "Hello, World"
plug-in creation.
- "Extend
Eclipse's Java Development Tools" walks though the process of
creating Eclipse plug-ins using the PDE.
- Check out the "Recommended Eclipse reading
list."
- Browse all the Eclipse content on developerWorks.
- New to Eclipse? Read the developerWorks
article "Get started with Eclipse
Platform" to learn its origin and architecture, and how to extend
Eclipse with plug-ins.
- Expand your Eclipse skills by checking
out IBM developerWorks' Eclipse project
resources.
- To listen to interesting interviews and
discussions for software developers, check out developerWorks
podcasts.
- For an introduction to the Eclipse
platform, see "Getting started with the Eclipse
Platform."
- Stay current with developerWorks' Technical events and
webcasts.
- Watch and learn about IBM and open source
technologies and product functions with the no-cost developerWorks On demand
demos.
- Check out upcoming conferences, trade
shows, webcasts, and other Events around the world that
are of interest to IBM open source developers.
- Visit the developerWorks Open source
zone for extensive how-to information, tools, and project updates
to help you develop with open source technologies and use them with IBM's
products.
Get products and technologies
- Download Eclipse Platform and other
projects from the Eclipse Foundation.
- Download IBM product evaluation
versions, and get your hands on application development tools and
middleware products from DB2®, Lotus®, Rational®,
Tivoli®, and WebSphere®.
- Innovate your
next open source development project with IBM trial software, available
for download or on DVD.
Discuss
- The Eclipse Platform
newsgroups should be your first stop to discuss questions
regarding Eclipse. (Selecting this will launch your default Usenet news
reader application and open eclipse.platform.)
- The Eclipse newsgroups has
many resources for people interested in using and extending
Eclipse.
- Participate in developerWorks blogs and get
involved in the developerWorks community.
Pat McCarthy, a Senior Software Engineer at IBM, is a specialist in the use and management of development technologies on a variety of runtime platforms. Pat’s IBM career has included hands-on development of business application systems in Poughkeepsie, New York, and 12 years of project management for the development of IBM Redbooks and education offerings in San Jose, California. He has spent the last several years as part of the Eclipse Jumpstart team in Raleigh, North Carolina, focused on supporting the use of Eclipse technology in IBM application development products. You can contact Pat at patmc at us.ibm.com.



