blob: bfefe89e834e785c5b03237900ec55d61b46be46 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2018. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<link rel="STYLESHEET" href="../book.css" type="text/css">
<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
<title>PDE Tips and Tricks</title>
</head>
<body>
<h2>Tips and Tricks</h2>
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<td valign="top" align="left" width="20%"><b>Reference an existing target inside another one</b></td>
<td valign="top" align="left" width="80%">
It is now possible to reference an existing target file inside another target:
<p>
<img src="images/include_target_1.png" alt="" />
</p>
This could be used for different purposes:
<ul>
<li>You could use a target from a remote location (e.g. github-repository using http-protocol) in your local IDE.</li>
<li>You could use a target deployed at a maven repository using the mvn:&lt;groupid&gt;:&lt;artifactid&gt;:&lt;version&gt; (this requires m2eclipse with PDE integration)</li>
<li>You could extend an existing local target using eclipse-variables</li>
<li>You could combine any of the above options</li>
</ul>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Show Command Line button in PDE Launch Configuration</b></td>
<td valign="top" align="left" width="80%">
You can view the command line used for launching the application by clicking the <b>Show Command Line</b> button on the PDE launch configuration dialog.
<p>
<img src="images/pde_show_command_line.png" alt="">
</p>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Disable API analysis builder</b></td>
<td valign="top" align="left" width="80%">
You can disable the API analysis builder on the <b>Plug-in Development</b> preference page.
<p>
<img src="images/pde-disable-analysis-builder.png" alt="">
</p>
<p>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Layout Spy tool</b></td>
<td valign="top" align="left" width="80%">
To debug SWT layouts, you can activate the Layout Spy tool by using the shortcut <b>Ctrl+Alt+Shift+F9</b> from any window.
<p>
<img src="images/layout-spy.png" alt="">
</p>
<p>Usage:</p>
<ul>
<li>Click <b>Select Control</b> then click the control you want to inspect.</li>
<li>Enable <b>Show overlay</b> and navigate the widget hierarchy until you find a
control whose boundary is correct (the red rectangle) and whose child's boundary
is incorrect (the yellow rectangle).</li>
<li>Look at the results of computeSize. If the result of computeSize is correct,
the problem is in the parent layout or its attributes. Otherwise, the problem
is in the child widget.</li>
</ul>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Change problem severity</b></td>
<td valign="top" align="left" width="80%">
You can configure the severity of an API tools problem or PDE compiler problem by invoking the <b>Quick Fix</b> (<b>Ctrl+1</b>) which opens the
corresponding preference page and highlights the configurable problem.
<p>
<img src="images/pde-configure-problem-pde-compiler.png" alt="">
</p>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Workspace plug-ins overriding target plug-ins</b></td>
<td valign="top" align="left" width="80%">
On the Plug-in Development preference page, there is an option to specify if workspace plug-ins should override target platform plug-ins
with the same id. By default, this option is enabled. When disabled, all plug-in versions from workspace and target platform will
be used and for a plug-in id, the best available plug-in will be chosen.
<p>
<img src="images/workspace-plugins-override-target.png" alt="">
</p>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Support for OSGi Declarative Services Annotations</b></td>
<td valign="top" align="left" width="80%">
OSGi Declarative Services provide a powerful mechanism for developing complex, service-oriented
applications. With proper tooling, annotations added to Declarative Services make it easy
to generate and maintain the required component descriptor files.
<p>
When enabled, PDE automatically generates and updates Declarative Services component
descriptor files from appropriately annotated Java source. This is done without requiring
any additional builder to be configured in your project.
</p>
<p>
When you annotate your component implementation classes with <code>@Component</code>, and any
reference bind methods with <code>@Reference</code>, PDE will validate your annotations
and generate the corresponding component descriptor files. Any errors discovered during validation
are highlighted and reported.
</p>
<p>
In addition, PDE also maintains the project's MANIFEST.MF and build.properties file
-- generated component descriptor files are automatically added to the manifest
and included in the build.
</p>
<p>
To enable this feature, go to <b>Preferences</b> or <b>Project Properties &gt; Plug-in Development &gt; DS Annotations</b>
and check <b>Generate descriptors from annotated sources</b>.
</p>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Convert API Tools Javadoc tags to annotations</b></td>
<td valign="top" align="left" width="80%">
Plug-ins using API Tools can add restrictions to API Java types (such as No Reference, No Extend)
using Javadoc tags or annotations. It is recommended that projects use annotations, so PDE
provides a conversion wizard that will replace the tags with the equivalent PDE annotations.
<p>
The wizard is available by right clicking on an API Tools enabled plug-in project and selecting
<b>Plug-in Tools > Convert API Tools Javadoc Tags</b>.
</p>
<p>
A list of the available restrictions is available on the API Tools
<a href="https://wiki.eclipse.org/PDE/API_Tools/Restrictions" target="_blank">wiki page</a>.
</p>
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Show the current target platform in status bar</b></td>
<td valign="top" align="left" width="80%">
If you regularly switch between target platforms, PDE provides an option to show the current target
platform in the status bar. On the <b>Plug-in Development</b> preference page, select
<b>Show current target platform in status bar</b>. The status bar entry will show the name of
the active target definition and will show an error icon if there are problems with the target.
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Find a feature by entering a plug-in name in the feature selection dialog</b></td>
<td valign="top" align="left" width="80%">
When adding a feature to a product, feature or launch configuration, you can enter the name of a plug-in in the filter text box
of the feature selection dialog. Features that include that plug-in will match the filter and be displayed.
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Reload button in target editor</b></td>
<td valign="top" align="left" width="80%">
In scenarios where the target editor is left in inconsistent state due to issues like unstable network connection and
it is impossible to resolve the condition without manually editing the target editor file, you can use the <b>Reload</b> button in the <b>Locations</b> section of <b>Target editor</b>.
It clears the cached p2 profile and then resolves the target.
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Set default preference values for your product</b></td>
<td valign="top" align="left" width="80%">
In order to set default preference values for your product, instead of manually adding the preferences to product's customization file, you can use the
<b>Convert Preferences</b> wizard in the <b>Customization</b> section of your <b>Product editor</b>.
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Create an API Baseline from a Target Definition</b></td>
<td valign="top" align="left" width="80%">
To avail API tooling functionalities for <b>any target definition</b>, you can create an API Baseline in the <b>Plug-in Development &gt; API Baselines</b> preference page.
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Quickly search for any plug-in artifact</b></td>
<td valign="top" align="left" width="80%">
Use the <b>Open Plug-in Artifact</b> dialog to quickly find and open plug-in artifacts. Search
by the name of the plug-in, feature or product, or search for a specific package, extension point
or extension. The icons can be used to see whether the artifact is available in the workspace or
if it comes from the target platform. You can press <b>Ctrl-Shift-A</b> to open the dialog.
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>To clean or not to clean</b></td>
<td valign="top" align="left" width="80%">When you create a new runtime
workbench launch configuration, PDE presets the Program Arguments on the
launch configuration to include a -clean argument.&nbsp;
<p>This -clean argument clears all runtime-cached data in your runtime
workbench from one invocation to the next to ensure that all the changes
made in your host workbench, e.g. new Java packages were added to a plug-in
project, etc., are picked up when you launch a runtime workbench.</p>
<p>This clearing of the cache may hinder performance if your target platform
contains a large number of plug-ins.&nbsp; </p>
<p>Therefore, if you're in a situation where your target platform has a
large number of plug-ins and you're at a stage where you are not actively
adding/removing packages from your plug-in projects, you could remove the
-clean argument from the launch configuration to improve startup time.</p></td>
</tr>
<tr>
<td valign="top" align="left" width="20%"><b>Importing with linking</b></td>
<td valign="top" align="left" width="80%">Importing external plug-ins and
fragments can be time consuming and may result in large workspaces,
depending on the content of the plug-ins being imported.&nbsp; Therefore,
the 'Import External Plug-ins and Fragments' wizard gives you the option to
import with linking.&nbsp; This means that the import operation will not
copy the resources being imported into your workspace.&nbsp; It will simply
create links to the files being imported.&nbsp; You will be able to browse
these linked resources, as if they had been copied into your workspace.&nbsp;
However, they are physically not there on your file system, so you will not
be able to modify them.&nbsp; Beware of operations that depend on files
being physically in your workspace, as they will not work on linked
resources.</td>
</tr>
<tr>
<td valign="top" align="left" width="20%" height="112"><b>Templates</b></td>
<td valign="top" align="left" width="80%" height="112">For a quick start, PDE provides
several template plug-ins that will generate a plug-in with one or more
fully-working extensions.&nbsp; In addition, if at any point, you would like
to add a new extension from the template list (without having to generate a
plug-in), you could access these extension templates directly from the
manifest editor.&nbsp; From the 'Extensions' page of the editor, click
'Add...'.&nbsp; In the wizard that comes up, select Extension Templates in
the left pane and choose the template of choice in the right pane.</td>
</tr>
<tr>
<td width="20%" valign="top" align="left" height="280"><b>Plug-in dependency extent</b></td>
<td width="80%" valign="top" align="left" height="280">If you have ever looked at the
list of plug-ins that your plug-in depends on and wondered why your plug-in
needs a particular plug-in X, now you can easily find out why.&nbsp;
<p>The <b>Compute Dependency Extent </b>operation
found on the context menu in several contexts (including manifest file
Dependencies page and Plug-in Dependencies view) performs a combined Java and
plug-in search to find all Java types and extension points provided by
plug-in X which are referenced
by your plug-in. The results will be displayed in the Search view.&nbsp; When a type is selected in the Search results view, the <b>References
in <i>MyPlugIn</i></b> action in the context menu searches for the places
in the plug-in where the selected type is referenced.&nbsp;</p>
<p>If the
search returns 0 results, you should definitely remove plug-in X from your
list of dependencies, as it is not being used at all, and it would just slow
class loading.</p>
<p>The <b>Compute Dependency Extent</b> is also useful to check if you are
using internal (non-API) classes from plug-in X, which might not be
desirable.</p></td>
</tr>
<tr>
<td width="20%" valign="top" align="left" height="112"><b>Finding unused dependencies</b></td>
<td width="80%" valign="top" align="left" height="112">Minimizing a plug-in's number of
dependencies is certain to improve performance.&nbsp; As your plug-in
evolves, its list of dependencies might become stale, as it might be still
containing references to plug-ins that it no longer needs.&nbsp; A quick way
to check that all dependencies listed by your plug-in are actually used by
the plug-in is to run the 'Find Unused Dependencies' utility, which is
available through the context menu of the 'Dependencies' page of PDE's
manifest editor.</td>
</tr>
<tr>
<td width="20%" valign="top" align="left" height="80"><b>Extending the Java
search scope</b></td>
<td width="80%" valign="top" align="left" height="80">Java Search is limited to projects
in your workspace and external jars that these projects reference.&nbsp; If
you would like to add more libraries from external plug-ins into the search:
open the <b>Plug-ins View</b>, select a plug-in and choose <b>Add to Java Workspace Scope</b>
from the context menu. This is handy for remaining
aware of other plug-ins that depend on ones you're working on.
<p>On the <b>Plug-in Development</b> preference page you can also turn on
<b>Include all plug-ins from target in Java workspace scope</b>, which will add every
plug-in in your target platform to the search scope.</p></td>
</tr>
<tr>
<td valign="top" align="left" width="20%">
<b>Creating a Rich Client Application</b>
</td>
<td valign="top" align="left" width="80%">
The
<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet(cheatSheetId=org.eclipse.pde.rcpapp)")'>
<img src="PLUGINS_ROOT/org.eclipse.help/command_link.svg" alt="Open the RCP cheat sheet"><strong>Creating a Rich Client Application</strong></a>
cheat sheet will guide you through the individual steps to create a plug-in,
define a plug-in based product, customize a product, export a Rich Client Platform (RCP)
application and define a feature-based product using the Plug-in Development Environment (PDE).
</td>
</tr>
<tr>
<td valign="top" align="left" width="20%">
<b>Creating an Eclipse Plug-in</b>
</td>
<td valign="top" align="left" width="80%">
The
<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet(cheatSheetId=org.eclipse.pde.helloworld)")'>
<img src="PLUGINS_ROOT/org.eclipse.help/command_link.svg" alt="Open the hello world cheat sheet"><strong>Creating an Eclipse Plug-in</strong></a>
cheat sheet will guide you through the individual steps to create a plug-in, a plug-in extension,
a feature and an update site using the Plug-in Development Environment (PDE).
It will also demonstrate how to install and uninstall a feature using Install/Update.
</td>
</tr>
</table>
</body>
</html>