ΠΠ°ΠΊ ΠΎΡΠΊΡΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ Π² eclipse
Developing the Eclipse «Hello World» plug-in
Summary
The traditional Hello World program doesn’t do that much, but it can be invaluable when exploring a new development environment. In this article we’ll develop the Eclipse Hello World plug-in and show you how to integrate it with the Eclipse Workbench. After you read this article you should know how to use the Eclipse Java™ Development Tooling to create, run, and debug a simple plug-in that extends the Eclipse Platform. You’ll see how to setup a project for your plug-in, edit the Java code, compile, and run or debug your plug-in in another launched copy of Eclipse. We’ll be looking at plug-in manifest files, extensions, and extension points to see how plug-ins are described to Eclipse and how they are integrated with the Platform.
By Jim Amsden, OTI
Updated September 6, 2002 for Eclipse release 2.0 by Andrew Irvine, OTI
Last revised January 28, 2003
This article describes Eclipse release 2.0, which differs in minor ways from the previous Eclipse release. If you are still working with Eclipse release 1.0, you should consult the original version of this article.
The Eclipse Plug-in Development Environment (PDE) project provides a very nice environment for creating plug-ins and integrating them with the Eclipse Platform and/or other plug-ins. We’re not proposing an alternative to PDE here. PDE is definitely the way to go. But sometimes its helpful to do things «by hand» in order to gain a more thorough understanding of how something works and how the pieces fit together. That’s the approach we’re going to take in this article. We’ll develop a very simple plug-in implementing the Eclipse version of the classic Hello World sample. This will allow us to focus on the relationships between the various components of Eclipse and our plug-in without getting bogged down in the details of the example itself. We’ll go raw as much as possible so we can see what’s actually happening under the covers. Hopefully this will give you a better understanding of Eclipse, help you make better use of PDE, and give you some idea where to look when things don’t go quite as planned.
The Problem
For the Eclipse Hello World program, let’s start out with a simple design. We’re going to add a button to the Workbench toolbar that when pressed, displays an information dialog containing the string «Hello World». Pressing OK dismisses the dialog. Nothing fancy, and certainly not anything that begins to exploit the full extensibility of Eclipse. But something we can easily use to get our feet wet. And it turns out that more complicated examples follow roughly the same pattern so we’ll get a lot out of this very simple example.
So lets get started! I’ll assume you’ve already downloaded the latest Eclipse code drop from eclipse.org, have it installed, and know how to start it up. If not, checkout the downloads page at the Eclipse site, and follow the instructions there.
Step 1: Getting ready to write Java code
Before we get started, we need to check some workbench preferences to make sure its configured properly for plug-in development. We’ll be setting other properties later in the article, but for now, let’s just set the default project layout and select the JRE we’re going to use.
Setting the default project layout : Edit the Java preferences by selecting the Window->Preferences menu item. Expand the Java list item. Click on the New Project item and check the Folders radio button. Ensure » Source folder name » is set to ‘src’ and that » Output folder name » is set to ‘bin’. If you do not alter this setting, all of the class files and source files will be placed in directories based at the root of the project. This is fine for small scale development, but is not the structure you want when constructing bigger programs.
Note: The Hello World plug-in assumes that the project layout has been altered to use ‘src’ and ‘bin’ folders. If you do not do this, you will get runtime errors when testing your plug-in.
Step 2: Creating the plug-in Project
Step 3: Integrating with Eclipse
Before we can start writing our code, we need to determine how we’re going to integrate with Eclipse. That’s because all extensions to Eclipse are done through plug-ins, and plug-ins integrate with each other through extensions on extension points. Eclipse plug-ins typically provide extensions to the platform that support some additional capability or semantics. What is needed is a way for plug-ins to allow other plug-ins to change their behavior in a controlled manner.
Eclipse provides an extensibility mechanism that is scalable, avoids name collisions, doesn’t require compilation of the whole product as a unit, and supports multiple versions of the same component at the same time. Eclipse does this by introducing the notion of a plug-in which encapsulates functional extensions to the Platform. Each plug-in has a name, id, provider name, version, a list of other required plug-ins, and a specification for its runtime. A plug-in can also have any number of extension points that provide a portal into which other plug-ins can add their functionality. This is how Eclipse enables other plug-ins to handle the variability supported by your plug-in. In order to integrate with other plug-ins, a plug-in provides extensions on these extension points (perhaps even its own extension points in order to provide some default behavior).
A plug-in is described in an XML file called the plug-in manifest file. This file is always called plugin.xml, and is always contained in the plug-in sub-directory. The Eclipse Platform reads these manifest files and uses the information to populate and/or update a registry of information that is used to configure the whole platform.
Step 4: Creating the plug-in Manifest File
Now that we know what we’ve got to do, lets tell Eclipse about our plug-in by creating the plug-in manifest file. Use File->New->Other. and select Simple->File to create a file called plugin.xml in the org.eclipse.examples.helloworld project.
Edit the plugin.xml file so that it looks like this:
The plug-in runtime element is how you tell the platform where to find the classes in your plug-in. Essentially, the requires and the runtime elements go together to specify the «classpath» for the plug-in. This approach allows each plug-in to have its own classpath independent of any other plug-in. Further, each plug-in has its own classloader which is used to load all classes defined by that plug-in (i.e., the classes found in its library declarations).
Don’t get confused between an extension-point element and an extension element with a point attribute. The extension-point element defines a hook into the platform while the extension specifies and instance of using the hook. The point attribute is the id of the extension-point you’re extending.
Step 5: Setting up the plug-in Project
Switch to the Java perspective if you’re not already there with Window->Open Perspective->Other and select the Java perspective (or if Java is available on the menu, you may select it directly). Then select the packages explorer tab to view the packages in your project. You should only see the packages you’ve specified in your Java build path so far, probably just the JRE_LIB entry for your rt.jar. Since your going to be using the IWorkbenchWindowActionDelegate interface, and other parts of the platform to develop our example, you need to include the referenced plug-in runtimes in your Java build path.
Now we’re ready to write the code and compile it against workbench.jar and swt.jar. The workbench has the JDK set, the project has all the jar files in its build path we need, and the plug-in manifest file tells us what classes we have to start with.
Step 6: Implementing the IWorkbenchWindowActionDelegate Interface
The code isn’t too complicated, so I won’t cover it in any more detail. Other articles will be addressing the specific Eclipse features we’re using, but we want to focus on plug-ins and the end-to-end integration story rather than the code specifics in this article.
Step 7: Testing your plug-in
We’re ready to test our plug-in! The best way to do this is to use two Eclipse workbenches, one for plug-in development, a second for testing and debug. Let’s call them the development workbench and the testing workbench to avoid confusion. We don’t want to use the same instance the Eclipse workbench for both development and test for a number of reasons:
Prior to launching a testing workbench you must tell Eclipse where the required plugins are located. Edit the Plug-in Development preferences by selecting the Window->Preferences menu item. Expand the Plug-In Development list item. Select Target Platform and click on the Not in Workspace button on the right hand side. You will note the selected items in the list to the left of this button are all now checked. Finally click on the OK button to accept these changes.
Now we can test the Hello World actions. You’ll see the Hello World icon that was specified in the icon attribute of the action element in our plug-in manifest file on the Workbench toolbar (if you don’t provide an icon, it will appear as a gray or red square). Move the cursor over it and you’ll see the hover help you entered. Click and you see the message. Not quite as simple as printf(«Hello World»); but it looks a lot nicer. To turn off the Hello World action set (and remove the associated button), select Window->Customize Perspective. and expand the Other category. Now you can uncheck the Hello World item.
When you turn off the Hello World action set, you’ll see that the icon is removed from the toolbar and you can no longer invoke the plug-in action.
Debugging your plug-in
Conclusion
We’ve seen the complete development of a plug-in extension to Eclipse from design to debug and test. We’ve done all the development, testing, and debugging using Eclipse itself and the Java Development Tooling. The Hello World example doesn’t do much, and the complexity per function is pretty high. But more complex plug-ins follow the same pattern, and Eclipse provides a lot more than we’ve seen with this simple example. You should now have a pretty good idea how all the pieces fit together and what it means to develop and integrate a plug-in. Now its time to do something real. You’ll want to use PDE for that, so look for that article coming soon.
Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.
Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both.
ΠΡΠ΅ ΡΠ°Π· ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Eclipse
ΠΠ²ΡΠΎΡ: ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ Π¦ΠΈΠΌΠ±Π°Π»
ΠΡΡΠΎΡΠ½ΠΈΠΊ: RSDN Magazine #1-2008
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 17.07.2008
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ: 15.04.2009
ΠΠ΅ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΠ°: 1.0
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² β Π³Π»Π°Π²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse, ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠ»ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΈΠ»ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌ. ΠΠΊΡΠΏΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Eclipse (ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² (plug-ins) Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Β«ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎΒ» Eclipse ΠΈΠ»ΠΈ Π±Π°Π½Π΄Π»ΠΎΠ² (bundles) Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ OSGi (Open Services Gateway interface)) Ρ Β«ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡΒ» ΠΏΠΎΡΡΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Ρ. ΠΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠΈ β Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π³Π»Π°Π·Π°ΠΌΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Β«ΠΎΠ±ΡΡΡΒ» ΠΊΠ°ΡΡΠΈΠ½Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΡΠ΅ΡΠ»ΠΈΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Π΅Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ . ΠΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π± ΠΎ Π»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π»ΡΡ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π Π½Π΅ΠΉ Π½Π΅ ΡΡΠ°Π²ΠΈΡΡΡ Π·Π°Π΄Π°ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π΄Π°ΠΆΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ β ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ°ΡΡΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ, Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠ΅Π· Π·Π½Π°Π½ΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠ°ΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² β Π² Β«Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅Β» ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ jar-ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΎΠ½ΠΈ (ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΈΠ»ΠΈ jar-ΡΠ°ΠΉΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ) β ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ. ΠΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ°Π΄ΠΈΠΈ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄Π΅ΡΠ΅Π²ΡΡΠΌ, ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΌ Π»Π΅Ρ, Π° Π»ΠΈΡΡΡΡΠΌ Π½Π° ΡΡΠΈΡ Π΄Π΅ΡΠ΅Π²ΡΡΡ . ΠΠ΄Π΅ΡΡ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° Π²Π΅ΡΡΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΎ Π»Π΅ΡΠ΅ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π΅ Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠ΅ΡΡΠ½ΠΎΡΡΡΡ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Ρ (Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ΅Π΄Ρ Eclipse) Π·Π½Π°ΠΊΠΎΠΌ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ workspace, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (view), ΡΠ΅Π΄Π°ΠΊΡΠΎΡ (editor), ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π° (perspective) ΠΈ ΠΏΡ. Π₯ΠΎΡΠΎΡΠΈΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² Eclipse ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΡΡ Β«ΠΡΠΎΠ΅ΠΊΡ EclipseΒ» (http://www.rsdn.ru/article/devtools/eclipse.xml?print).
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΈ ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΡΠ°ΠΊ, ΠΏΠ»Π°Π³ΠΈΠ½ Eclipse.
ΠΠ°ΠΊ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΠ»Π°Π³ΠΈΠ½:
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΡΠ΅Π΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΡΠ°ΠΌΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π²ΡΡΠ΅ΠΊΠ°ΡΡ ΠΈΠ· ΡΡΠΈΡ Π·Π°Π΄Π°Ρ.
ΠΠ°ΠΊ Π² Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² Eclipse Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Eclipse) ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ (Π² ΡΠΌΡΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²) ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΈ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ, ΠΏΡΠΈΡΠ΅ΠΌ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ°Π΄ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² β ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ.
Π Π±Π°Π·ΠΎΠ²ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΏΡΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse (ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ/ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ) Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ) ΠΌΠ΅ΡΡΠ΅, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ, Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ features ΠΈ plugins. ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ (Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ jar-ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²) ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Ρ.Π΅. Π²ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ΄ Π΄Π°Π½Π½ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
ΠΡΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Ρ, ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ΅ΡΡΡΡΠΎΠ²: ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΉ Eclipse, ΡΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ (Π½Π°ΡΡΡΠΎΠΉΠΊΠ°, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ.Π΄.). Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ·ΠΎΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Β«ΡΠΊΡΠΈΠΏΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» ΠΌΠΎΠΆΠ½ΠΎ Β«ΠΌΠ΅Π½ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΒ» Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΡΠΌ., Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΡΠ°ΡΡΡ http://constantiner.blogspot.com/2006/03/eclipse.html, ΠΏΡΠ°Π²Π΄Π°, ΠΎΠ½Π° ΠΎΡΠ½ΡΠ΄Ρ Π½Π΅ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , Π½ΠΎ Π·Π°ΡΠΎ Π² Π½Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Β«ΡΠΎΡΠ΅ΠΊ Π²Ρ ΠΎΠ΄Π°Β» Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΠΌ).
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π± ΠΎ Π»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°Ρ (ΠΈΡ ΠΊΠΎΠ΄, XML-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ) Β«Π·Π°ΠΌΠΊΠ½ΡΡΡΒ» Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse.
Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ β Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ (preferences), ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ Π½Π΅ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π° ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌΡ workspace (ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ /.metadata/.plugins). ΠΠΎΡΡΠΎΠΌΡ workspaces ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Eclipse ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Β«ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡΒ» ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ workspaces.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ
ΠΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ Eclipse 3.1 ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ (ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ, Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠ°, ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈ ΠΏΡ.) ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΠΎΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π»Ρ Eclipse. ΠΠ° ΡΠΌΠ΅Π½Ρ ΡΡΠΎΠΌΡ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΠΎΠΌΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΏΡΠΈΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ², Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β OSGi (Open Services Gateway interface). Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ OSGi ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«ΡΠ±ΠΎΡΠΊΠΎΠΉ (bundle)Β» ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°. Π‘Π±ΠΎΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Β«Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΒ».
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ OSGi Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ (ΡΠ°ΠΉΠ» MANIFEST.MF Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ META-INF). Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
Π’Π΅ΡΠΌΠΈΠ½Ρ Β«BundleΒ» ΠΈ Β«PackageΒ» Π³ΠΎΠ²ΠΎΡΡΡ ΡΠ°ΠΌΠΈ Π·Π° ΡΠ΅Π±Ρ β Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ±ΠΎΡΠΎΠΊ OSGi ΠΈ (Π½Π΅ Π²ΡΠ΅Π³Π΄Π°) ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Java, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ±ΠΎΡΠΊΠ°ΠΌ. Bundle-SymbolicName ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ. Name ΠΈ Vendor β ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ.
Π’Π΅Π³ Require-Bundle ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΡΠ΅Π΄Π° Eclipse (ΡΠΎΡΠ½Π΅Π΅, Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π²ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΠ±ΠΎΡΠΎΠΊ, ΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, ΡΠΎ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π·Π°ΠΏΠΈΡΡ Π² ΠΆΡΡΠ½Π°Π» (log), Π° ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Require-Bundle Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΠ°Π»ΡΠ½ΡΠΌ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΡΠΎ ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ (resolution:=optional). Π‘ΡΠ΅Π΄Π° Eclipse Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΠ°ΠΆΠ½ΡΠΌ ΡΠ΅Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π³ Eclipse-LazyStart (Π² Eclipse 3.1 ΡΠ΅Π³ Π½Π°Π·ΡΠ²Π°Π»ΡΡ Eclipse-AutoStart, ΠΊΠΎΡΠΎΡΡΠΉ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Eclipse 3.2, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ). ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ true Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π° Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π½ΡΠΆΠ΅Π½.
Π ΡΠ΅Π³Π΅ Bundle-Activator Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅.
ΠΠ°Π½ΠΈΡΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ XML-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π² Π½Π΅ΠΌ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π°ΡΠΏΠ΅ΠΊΡΠ°ΠΌΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΌΡ. ΠΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° β ΡΠ°ΠΉΠ»Π΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ plugin.xml. ΠΠ³ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β ΠΎΠΏΠΈΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Β«ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΒ» (extension points) Eclipse, ΠΎ ΡΠ΅ΠΌ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ Π²ΠΏΠ΅ΡΠ΅Π΄ΠΈ.
Π Π°Π±ΠΎΡΠ° Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ plugins (ΠΈ/ΠΈΠ»ΠΈ links) Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ MANIFEST.MF ΠΈ plugin.xml. ΠΡΠΈ ΡΡΠΎΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΡΡΠΎΠΈΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ²ΡΠ·Π΅ΠΉ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ (ΡΠ΅Π΅ΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²), Π½ΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ (ΡΡΡΡΠΊΡΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ΡΠΎΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΡΠ΅ΠΌ Β«ΠΎΠ±ΡΡΠ½ΡΠΉΒ» Π½Π°Π±ΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²). ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈ Π΅Π³ΠΎ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΡ (Π·Π°Π±Π΅Π³Π°Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΏΠ΅ΡΠ΅Π΄ β Π²ΡΠ·ΠΎΠ² callback-ΠΌΠ΅ΡΠΎΠ΄Π° start() ΠΊΠ»Π°ΡΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π°) Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠ°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΏΡΠ΅ΡΠ΅ΡΠΏΠ΅Π²Π°Π»ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΈ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΡΠΎ, Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½Π΅ Ρ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Eclipse, Π° Ρ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ° OSGi. ΠΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ OSGi, Ρ.Π΅. Π² Eclipse 2.x, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ»ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄ΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Ρ.Π΅. ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.eclipse.ui.IStartup. Π Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ β Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅Π³Π° Eclipse-LazyStart (ΠΈΠ»ΠΈ ΡΠ΅Π³Π° Bundle-ActivationPolicy OSGi). ΠΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Eclipse-LazyStart ΠΈ Bundle-ActivationPolicy ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Eclipse 3.3. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠ΅Π³Π° Eclipse-LazyStart.
ΠΠ»Π°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ»Π°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° (ΠΎΠ½ ΠΆΠ΅ ΠΊΠ»Π°ΡΡ-Π°ΠΊΡΠΈΠ²Π°ΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°) β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ΅Π΄ΠΎΠΉ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π°. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.osgi.framework.BundleActivator:
Π‘ΡΠ΅Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ start() ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄ stop() Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π΅Π³ΠΎ Π²ΡΠ³ΡΡΠ·ΠΊΠΎΠΉ. ΠΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅ (MANIFEST.MF), Π² ΡΠ΅Π³Π΅ Bundle-Activator.
ΠΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Ρ.Π΅. Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° (Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° getInstance()).
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΊΠ»Π°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° (ΡΠΎΡΠ½Π΅Π΅, ΡΠ°ΠΌ ΠΏΠ»Π°Π³ΠΈΠ½ β Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ»Π°ΡΡ Π΅Π³ΠΎ Π°ΠΊΡΠΈΠ²Π°ΡΠΎΡΠ°) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ) ΠΈ Π΄Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Eclipse ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π² Π³ΠΎΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Β«ΠΠΎΡΠ½Π΅ΠΌΒ» ΡΡΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ org.eclipse.core.runtime.Plugin, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ»Π°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° (Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ):
ΠΠΎΠΌΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΆΠΈΠ·Π½ΠΈ, ΠΊΠ»Π°ΡΡ Plugin ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΠΉΡΠΎΠΌ, ΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ β AbstractUIPlugin:
ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Plugin ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ ΠΈ ΡΠ΅Π΅ΡΡΡΠΎΠ², Π² ΡΠΎΠΉ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΠ»Π°Π³ΠΈΠ½Π΅ ΠΏΡΠΈ Π΅Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅.
ΠΠ°ΠΏΡΡΠ΅Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Java (JVM). Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠΎ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ² (classLoader). Π’Π°ΠΊΠΎΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Β«Π²Π½Π΅ΡΠ½ΠΈΡ Β» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΏΠ»Π°Π³ΠΈΠ½Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, log4j), Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«buddy loadingΒ», ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π³ΠΎΠ² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° β Eclipse-BuddyPolicy ΠΈ Eclipse-RegisterBuddy (ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Eclipse 3.3).
ΠΠ»Π°ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ ΡΡΠ΅Π΄Π°, ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΡΠ°ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ΅Π΄Ρ. Π’Π°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΠΉ (job manager, Π·Π°Π΄Π°Π½ΠΈΡ β ΠΎΠ±ΡΠ΅ΠΊΡΡ Eclipse, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ, ΠΏΠΎ ΡΡΡΠΈ, Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Java), ΡΠ²ΡΠ·ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡ ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ β org.eclipse.core.runtime.Platform. ΠΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΏΠΎΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ plugin.xml ΠΏΠ»Π°Π³ΠΈΠ½Π°
ΠΡΠΎΡΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (Π½Π°ΡΡΠ΄Ρ Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΠΌ) β xml-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ plugin.xml. ΠΡΠΎΡ Π΄Π΅ΡΠΊΡΠΏΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Eclipse Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠΎΠ΄ ΠΏΠ»Π°Π³ΠΈΠ½Π°. ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° β ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ²ΡΠ·ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Β«ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΒ». Π’ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΊΡΠ°ΡΠΊΠΎ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π½ΠΈΠΆΠ΅, Π·Π΄Π΅ΡΡ ΠΆΠ΅ ΠΏΠΎΠΊΠ° Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠ΄Π° (ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ²) ΠΏΠ»Π°Π³ΠΈΠ½Π°. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ ΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²Π½ΠΎ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅Β» ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, Π½ΠΎ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² (Π° Π½Π΅ ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ²).
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Β«Π²ΡΡΡΠ½ΡΡΒ» β PDE ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΊΡΠΏΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΡΠ½ΠΈΠΆΠ°ΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΠΏΡΠΎΡΠ΅ΠΌ, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° plugin.xml ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ ΠΎΡΠ½ΠΎΠ²Π°ΠΌΠΈ Β«ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΒ» Eclipse.
Π’ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (extension points)
Π’Π΅ΠΌΠ° ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ β ΠΊΠ»ΡΡΠ΅Π²Π°Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Eclipse. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠΊΠΎ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΄Π»Ρ Β«ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡΒ», ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ β Π½Π΅ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
Π Π°Π±ΠΎΡΠ° Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ΅ΡΠ»ΠΈΠ²ΠΎ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° Π΄Π²Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π»Π°ΡΡΠΈ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ . ΠΠ΅ΡΠ²ΠΎΠ΅ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡΠΎΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π»ΡΡΡΠ΅ Π½Π°ΡΠ°ΡΡ Ρ ΠΎΠ±Π·ΠΎΡΠ° ΡΠ΅Ρ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ (Ρ ΠΎΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ). ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
Π‘ΠΌΡΡΠ» ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈ ΡΠ»Π°Π±ΠΎΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π»ΡΠ±ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Eclipse. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β Π² ΡΠΌΡΡΠ»Π΅ ΠΊΠ°ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ°ΠΊ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ².
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Eclipse (ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ Π²Π°ΠΆΠ½ΠΎ Π½Π° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅). ΠΡΡΡ, ΡΡΠ»ΠΎΠ²Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Β«ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉΒ», Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ, ΠΏΡΠΈΡΠ΅ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ. ΠΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Java ΠΈΠ»ΠΈ C++ (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π½ΠΎ ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ). ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Β«ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ²Β», Ρ ΠΎΡΡ ΠΈ ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠΈΠΏΡ Β«ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅Β».
ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΠΎΠ·Π΄Π°ΡΡ Β«Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΒ» ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ (ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ Β«ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉΒ» (Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ β ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠΏΠΎΡΡΠ΅Π΄ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΎΡ Β«Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎΒ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ). ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ:
ΠΡΠ΅ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊΠ°ΠΊ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΡΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Eclipse.
Π‘ΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°.
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π½Π°Π»ΠΈΡΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π° Β«ΡΠΈΠΊΡΠ°ΡΠΈΠΈΒ» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠ°ΡΠ°ΡΡΠ΅ΠΉΡΡ Π±ΡΠ΄ΡΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ. ΠΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½ΡΠΆΠ½ΠΎ Π½Π΅ Β«Π·Π°ΡΠΈΠ²Π°ΡΡΒ» Π² ΠΊΠΎΠ΄, Π° ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°(ΠΎΠ²), ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΌΡΠ²Π°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ XML-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Ρ Π½ΠΈΠΌ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΊΡΠΏΠ΅ΡΡΡ ΡΡΠ΅Π΄Ρ, Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΡ Π΅ΠΌΡ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². Π‘ΠΎΡΡΠ°Π² ΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ Π°Π²ΡΠΎΡΠ°ΠΌΠΈ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΡΡΡΠ»ΠΎΠΊ ΠΈ/ΠΈΠ»ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° listener’ΠΎΠ². Π§ΠΈΡΠ°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ listener’ΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ JavaBeans, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
Π-ΡΡΠ΅ΡΡΠΈΡ , Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Eclipse, Ρ.Π΅. Π΄Π»Ρ ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° Class.forName(). ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠΎΠ² (ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠ»Π°Π³ΠΈΠ½Π°) Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ β IConfigurationElement.createExecutable() ΠΈΠ»ΠΈ IConfigurationElement.createExecutableExtension(). Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
Π-ΡΠ΅ΡΠ²Π΅ΡΡΡΡ , Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π°ΡΠΈΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΡΡΠΎΠΌ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ SWT ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ (Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΡΡΡΠ½ΠΎΡΡΡΠΌ) Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° β UI-ΠΏΠΎΡΠΎΠΊΠ°).
Π-ΠΏΡΡΡΡ , Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎΠ± ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅Π΄Ρ Eclipse. ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.eclipse.core.runtime.ISafeRunnable:
ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° run() ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ°ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π°
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ callback-ΠΌΠ΅ΡΠΎΠ΄Π° handleException().
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΈΠΊΡΡΡΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ ΡΡΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ (Π² ΡΠ΅Π³Π΅ description) ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ» Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΠΎΡΠ΅ΠΊ.
ΠΠ»Π°Π³ΠΈΠ½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΠΎΡΠΊΡ (ΠΈΠ»ΠΈ ΡΠΎΡΠΊΠΈ) ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΡΠ΅Π΄Π΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅ Eclipse (Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²) Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ°ΠΊΠ°Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ (ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΌ ΡΠΎΡΠΊΠΈ.
ΠΠΎ ΡΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ callback-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠ΅ΠΌΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠΊΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Β«Π²Π΅Π΄ΡΡ ΡΠ΅Π±ΡΒ» ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ, ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Eclipse β ΡΠ΅ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
ΠΠ±ΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Eclipse ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ (Help->Help Contents->Platform Plug-in Developer Guide->Reference->Extension Point Reference. ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΆΠ΅ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°, β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΡΠΏΠ΅ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² (Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ° extensions ΡΠΊΡΠΏΠ΅ΡΡΠ°, ΠΊΠ½ΠΎΠΏΠΊΠ° Add. ).
Π ΠΈΡΡΠ½ΠΎΠΊ 1. ΠΡΠ±ΠΎΡ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ (ΠΈΠ»ΠΈ ΠΊ ΡΡΠ°ΡΡΡΡ?), ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΡΡΡΠ΄Π½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅. ΠΠΈΠΆΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Eclipse ΡΠ°Π·Π±ΠΈΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΡΡΠΏΠΏ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ (Π½Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°Π΄ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²) ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΡΠΊΠΈ Π³ΡΡΠΏΠΏΡ Workbench β ΠΈΡ (Π½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡ ) ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ org.eclipse.ui. ΠΠ°ΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ Ρ Β«Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉΒ» (Actions).
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ (Actions)
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Eclipse ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ, Π½ΠΎ ΠΈΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ. Action β ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ, Π½Π΅ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΡΠ½ΠΊΡΠ°ΠΌ ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Eclipse ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². Π‘Π΄Π΅Π»Π°Π½ΠΎ ΡΡΠΎ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ²Π½ΠΎ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ (Β«ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΒ») ΠΈ Β«Π½Π΅ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΡΒ» ΡΠ°ΡΡΡ. Π’Π°ΠΊΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π°) ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Β«ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄ΠΎΡΡΡΠΏΠ°Β» ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΠΌΠ΅Π½Ρ, ΠΊΠ½ΠΎΠΏΠΊΠΈ) Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΏΠ»Π°Π³ΠΈΠ½Π°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Eclipse) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.eclipse.jface.action.IAction ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ Π΅Π³ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Action.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΆΠ΅, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΏΠ»Π°Π³ΠΈΠ½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (ΡΠΎΡΠ½Π΅Π΅, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Β«ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡΒ» ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.eclipse.ui.IActionDelegate:
ΠΠ΅ΡΠΎΠ΄ run() Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ½ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΠΏΡΠ½ΠΊΡΠ° ΠΌΠ΅Π½Ρ (Π΅ΡΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ). ΠΠ΅ΡΠΎΠ΄ selectionChanged() ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Π² ΡΡΠ΅Π΄Π΅ Eclipse ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΌΠ΅ΡΡΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°) Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ org.eclipse.ui.actions.ActionDelegate.
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ IActionDelegate, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ: IWorkbenchWindowActionDelegate (ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π³Π»Π°Π²Π½ΡΠΌ ΠΌΠ΅Π½Ρ ΠΈ ΠΏΠ°Π½Π΅Π»ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ (workbench)), IObjectActionDelegate (ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΌ ΠΌΠ΅Π½Ρ), IViewActionDelegate (ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ, view) ΠΈ IEditorActionDelegate (ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°ΠΌΠΈ, editor). ΠΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ»Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
ΠΠ±ΡΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° β ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π΅Π³ΠΎ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡΠ½ΠΊΡΠ°ΠΌΠΈ ΠΌΠ΅Π½Ρ. ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΡΠ΅Π΄Ρ Eclipse (Ρ.Π΅. Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ IWorkbenchActionDelegation)
ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Eclipse Π·Π°Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠ²ΠΎΠΉΡΡΠ² (ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΡ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ). ΠΠ»Ρ Π΅Π³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π³ :
Π‘ΠΌΡΡΠ» Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎΠ½ΡΡΠ΅Π½: class Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IWorkbenchActionDelegate, icon β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, id β ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΠΎΠ½ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ IAction), label β Π½Π°Π΄ΠΏΠΈΡΡ, ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²), tooltip β ΡΠ΅ΠΊΡΡΠΎΠ²Π°Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°. ΠΡΡΠΈΠ±ΡΡΡ menubarPath ΠΈ toolbarPath ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΌΠ΅ΡΡΠΎ Π² ΠΌΠ΅Π½Ρ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π³Π΄Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° IWorkbenchActionDelegate ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ:
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ΅Π½Ρ. Π‘Π²ΡΠ·ΠΊΠ° Β«action β menuΒ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠ΅Π³Π° :
ΠΠ΄Π΅ΡΡ Π½Π΅ ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΠΌΠ΅Π½Ρ β ΡΠΌΡΡΠ» ΡΡΠ΅Π½ ΠΈ ΡΠ°ΠΊ.
ΠΡ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° actionSet’Π° ΠΊ ΡΠΎΡΠΊΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. ΠΡΠ° ΡΠΎΡΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ org.eclipse.ui.actionSets:
ΠΠΎΡ ΠΈ Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ org.eclipse.ui.actionSets. ΠΠΊΡΠΏΠ΅ΡΡΡ PDE ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ°Π±ΠΎΡΡ Β«Π²ΡΡΡΠ½ΡΡΒ» Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΠ»Π°Π³ΠΈΠ½Π° β ΡΠ°ΠΉΠ»ΠΎΠΌ plugin.xml.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΌ ΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° Π΄ΡΡΠ³Π°Ρ ΡΠΎΡΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ β Π½Π΅ IWorkbecnchActionDelegate, Π° IObjectActionDelegate:
ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° setActivePart() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ (ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ) ΡΡΡΠ»ΠΊΡ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ (Part β ΠΎΠ±ΡΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½ Eclipse Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Β«ΠΎΠΊΠΎΠ½Β» Π² ΡΠΎΡΡΠ°Π²Π΅ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ). Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΊΠ»Π°ΡΡΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ ΠΈ Ρ ΡΠΎΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ org.eclipse.ui.popupMenus:
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΎΡΠΊΠΎΠΉ popupMenus Π½Π΅Ρ ΡΠΌΡΡΠ»Π° Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π·Π°ΡΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π°, Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΠΈΡΠ»Π° Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½Π΅ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΒ» (ΡΠΎΡΠ½Π΅Π΅, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ), Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° β ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π΅ΡΡΠΌΠ° ΠΈΠ·ΠΎΡΡΠ΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ XML β Π½ΠΎ ΠΈ Β«Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΒ» (ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ).
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Π²Π»ΠΈΡΡΡ Π΄Π²Π° Π°ΡΡΠΈΠ±ΡΡΠ°:
Π ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΡeΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Actions) ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ² Eclipse. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ° Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ, Π½Π°ΡΡΠ΄Ρ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΌ ΠΌΠ΅Π½Ρ, Π΅ΡΠ΅ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π΅ (pull-down) ΠΌΠ΅Π½Ρ. ΠΡΠΊΡΠΎΠΉΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ Java Browsing ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Members.
ΠΠ»Ρ Π²Π΅ΡΡΠΈΠΈ 3.3 ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅ plugin.xml (Π² jar-ΡΠ°ΠΉΠ»Π΅ Π΄Π»Ρ org.eclipse.jdt.ui, Π² ΠΌΠΎΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ Eclipse ΡΡΠΎ ΡΠ°ΠΉΠ» org.eclipse.jdt.ui_3.3.1. r331_v20070906.jar). Π ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ. ΠΠ»Π°Π²Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ viewActions ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° org.eclipse.ui.IViewActionDelegate:
ΠΠ΅ΡΠΎΠ΄ init() ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π΅ΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Β«ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎΒ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ:
ΠΠ»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΠΌΠ΅Π½Ρ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ β ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΎΡΡ Π΄Π»Ρ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ actionSets.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, Π° Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IEditorActionDelegate:
ΠΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΊΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IObjectActionDelegation.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ² ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ Β«ΡΠΊΡΡΠΏΠ½Π΅Π½Π½ΡΡ Β» ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ β Π·Π°Π΄Π°ΡΠ° Π½Π΅ΡΠ»ΠΎΠΆΠ½Π°Ρ. Π‘Π»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ Π² ΡΡΠΈΠ»Π΅, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎΠΌ Π½Π΅ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ², Π° Π΄Π»Ρ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ² ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΠΎΡΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ org.eclipse.ui.perspectives. Π‘ΡΡΡΠΊΡΡΡΠ° Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² plugin.xml ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°:
ΠΠ΄Π΅ΡΡ ΠΌΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π°, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π°, ΠΏΠΎ ΡΡΡΠΈ, ΡΠ°Π±ΡΠΈΠΊΠΎΠΉ Π½ΡΠΆΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ»Π°ΡΡ MyPerspectiveFactory Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.eclipse.ui.IPerspectiveFactory:
ΠΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π° Eclipse, ΠΏΠΎ ΡΡΡΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π»Ρ Β«Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Β» ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ, ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ², ΠΏΠ°Π½Π΅Π»Π΅ΠΉ, ΠΌΠ΅Π½Ρ. ΠΠ΅ Π·Π°Π΄Π°ΡΠ° (Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ) β Π·Π°Π΄Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ (Layout) Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ, Π·Π°Π΄Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ Ρ.Π΄. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π° ΡΠΎΠ·Π΄Π°Π½Π° ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ°Π±ΡΠΈΠΊΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ² Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½.
ΠΠ»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ createInitialLayout(). Eclipse Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠΊΡΠΏΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Β«Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡΒ» ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π·Π΅Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ. ΠΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° createInitialLayout() Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ Π·Π°Π½ΠΎΠ²ΠΎ, Π° Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΒ», Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΏΠ»Π°Π³ΠΈΠ½Π°, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΊΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ org.eclipse.ui.perspectiveExtensions. ΠΠΎ ΡΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π·Π°Π΄Π°Π½ΠΈΠΉ XML-ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΎΡΠΈΠ², ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π° Π±Π°Π·Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° org.eclipse.ui.part.ViewPart (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ org.eclipse.ui.IViewPart, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΡΠΎΡΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ).
Π ΠΈΡΡΠ½ΠΎΠΊ 2.
ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠ΅ ΠΊΠ°ΠΊ ΠΏΠ°ΠΏΠΊΠΈ, ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌΠΈ. ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ, Ρ ΠΎΡΡ ΡΠΎΡΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠ° parentCategory).
ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²:
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎ Π½Π°ΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΊΡΠΏΠ΅ΡΡ Eclipse. ΠΠ»Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ SWT (ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²), Π° ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½ΡΠΌΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ JFace.
ΠΡΡΠ³ΠΈΠ΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ
ΠΠ΄Π΅ΡΡ ΠΎΡΠ΅Π½Ρ ΠΊΡΠ°ΡΠΊΠΎ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ (ΡΠΎΡΠ½Π΅Π΅ ΡΠΊΠ°Π·Π°ΡΡ β ΡΠΏΠΎΠΌΡΠ½ΡΡΡ) ΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
Π’ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π’ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ
Π ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ Eclipse ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΠ΅ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π΄Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡ β ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ β ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
Π’ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ β org.eclipse.ui.commands (Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌ β ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ) ΠΈ org.eclipse.ui.bindings (Π·Π°Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠΎ Π΅Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ). ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ (action) ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ (ΠΏΠΎ Π΅Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ definitionId Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Eclipse, Ρ.Π΅. Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΌΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»ΡΠ±ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ·ΡΠΊΠ° Java.
