´Ù¸¥ Ç÷¯±×Àο¡¼ »ç¿ëÀÚ Ç÷¯±×ÀÎÀÇ ±â´ÉÀ» È®ÀåÇϰųª »ç¿ëÀÚ Á¤ÀÇÇÒ ¼ö ÀÖ°Ô ÇÏ·Á¸é È®ÀåÁ¡À» Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. È®Àåó·³ È®ÀåÁ¡À» Á¤ÀÇÇϱâ À§ÇÑ Ã¹ ¹øÂ° ´Ü°è´Â »ç¿ëÀÚ Ç÷¯±×ÀÎÀÇ plugin.xml ÆÄÀÏ¿¡ ÀϺΠ¸¶Å©¾÷À» Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½Àº Ư¼º º¸±âÀÇ ¿¹Á¦ÀÔ´Ï´Ù.
<?xml version="1.0" ?> <plugin name="Simple Extension Point Plugin" id="org.eclipse.sample" version="1.0"> <runtime> <library name="extpt.jar" /> </runtime> <extension-point name="Sample Extension Point" id="sampleExtensionPoint"/> </plugin>
À̰ÍÀÌ »ç¿ëÀÚ ÀÚ½ÅÀÇ È®ÀåÁ¡À» Á¤ÀÇÇϱâ À§ÇÑ ¸ðµç ÀÛ¾÷ÀÔ´Ï´Ù. ÀÌ È®ÀåÁ¡¿¡ ¿¬°áµÇ´Â È®ÀåÀÇ ±¸Á¶´Â Ç÷§Æû¿¡¼ ÇØ¼®ÇÏÁö ¾Ê°í ´ë½Å È®ÀåÁ¡ Á¦°øÀÚ°¡ Á¤ÀÇÇÑ ½ºÅ°¸¶¸¦ µû¶ó¾ß ÇÕ´Ï´Ù. È®Àå ¸¶Å©¾÷ÀÌ ¿Ã¹Ù¸¥ XMLÀ̾î¾ß ÇÑ´Ù´Â °ÍÀÌ À¯ÀÏÇÑ Á¦ÇÑ »çÇ×ÀÔ´Ï´Ù. È®ÀåÁ¡À» Á¤ÀÇÇÏ¸é ·±Å¸ÀÓ¿¡ Ç÷§ÆûÀÇ Ç÷¯±×ÀÎ ·¹Áö½ºÆ®¸®¸¦ Á¶È¸ÇÏ¿© Á¸ÀçÇÏ´Â ¸ðµç È®ÀåÀ» Á¶È¸ ¹× ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ·±Å¸ÀÓ¿¡ È®ÀåÀº IExtension ¿ÀºêÁ§Æ®·Î ManifestµË´Ï´Ù. Â÷·Ê·Î È®ÀåÀº IConfigurationElement ¿ÀºêÁ§Æ®ÀÇ Æ®¸®·Î ±¸¼ºµÇ´Âµ¥, È®Àå ¸¶Å©¾÷ÀÇ °¢ ¿ä¼Ò¿¡ ´ëÇØ Çϳª¾¿ ±¸¼ºµË´Ï´Ù. ´ÙÀ½ ÄÚµå ½º´ÏÆê¿¡¼´Â À§¿¡¼ Á¤ÀÇÇÑ È®ÀåÁ¡°ú ¿¬°üµÈ ¸ðµç È®Àå¿¡ ´ëÇÑ Ç÷¯±×ÀÎ ·¹Áö½ºÆ®¸®¸¦ Á¶È¸ÇÕ´Ï´Ù.
IPluginRegistry registry = Platform.getPluginRegistry(); IExtensionPoint point = registry.getExtensionPoint("org.eclipse.sample.sampleExtensionPoint"); if (point != null) { IExtension[] extensions = point.getExtensions(); System.out.println("Found " + extensions.length + " extensions"); }
´Ü¼øÇÑ °æ¿ì¿¡¼´Â È®ÀåÁ¡°ú ±× È®Àå °£ÀÇ À¯ÀÏÇÑ »óÈ£ ÀÛ¿ëÀÌ È®Àå ¸¶Å©¾÷¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. È®ÀåÀº È®Àå ¸¶Å©¾÷ÀÇ XML ³»¿¡¼ Á÷Á¢ ÀϺΠµ¥ÀÌÅͳª ȯ°æ ¼³Á¤À» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¸é È®ÀåÁ¡ Ç÷¯±×Àο¡¼ ÇØ´ç Á¤º¸¸¦ Àаí ó¸®ÇÏ¿© ÀϺΠ»ç¿ëÀÚ Á¤ÀÇµÈ ÀÛµ¿À» Á¦°øÇÕ´Ï´Ù.
°í±Þ È®ÀåÁ¡À» »ç¿ëÇÒ °æ¿ì È®Àå¿¡¼ Á¤ÀÇÇÑ ¿ÀºêÁ§Æ®¿Í ·±Å¸ÀÓ¿¡ »óÈ£ ÀÛ¿ëÇϰíÀÚ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©±â¼ÀÇ Æ®¸¯Àº È®ÀåÁ¡À» Á¤ÀÇÇÑ Ç÷¯±×Àο¡¼ ´ë°³ È®ÀåÀÇ Å¬·¡½º¿Í ÆÐŰÁö À̸§À» ¸ð¸£±â ¶§¹®¿¡ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ¿© ¿¹»óÇϴ Ŭ·¡½º ±¸Á¶¸¦ ¼³¸íÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·± ´ÙÀ½ IExecutableExtensionÀ» »ç¿ëÇÏ¿© È®ÀåÀÇ Ç÷¯±×Àο¡ Àִ Ŭ·¡½º¸¦ ÀνºÅϽºÈÇϰí ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ·±Å¸ÀÓ¿¡ ¿ÀºêÁ§Æ®¿Í »óÈ£ ÀÛ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹Á¦¸¦ »ç¿ëÇÏ¿© ¼³¸íÇϱâ À§ÇØ plugin.xml ÆÄÀÏÀÇ ´ÙÀ½ ½º´ÏÆê¿¡¼´Â ¾Õ¿¡¼ Á¤ÀÇÇÑ »ùÇà ȮÀåÁ¡À¸·Î ¿¬°áµÇ´Â È®ÀåÀ» Á¤ÀÇÇÕ´Ï´Ù.
<extension name="Sample Extension" id="myExtension" point="org.eclipse.sample.sampleExtensionPoint"> <someObject> <run class="org.eclipse.examples.SomeClass"/> </someObject> </extension>
ÀÌ È®Àå¿¡´Â ÀνºÅϽºÈÇÒ Å¬·¡½º À̸§À» Æ÷ÇÔÇÏ´Â ½ÇÇà ÆÄÀÏ È®ÀåÀÇ ¸¶Å©¾÷ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Å¬·¡½º´Â È®ÀåÁ¡À» Á¤ÀÇÇÑ Ç÷¯±×Àο¡¼ Á¤ÀÇÇÑ ÀÎÅÍÆäÀ̽º¿Í ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù. ÀÌÀü¿¡ ¼³¸íÇÑ °Íó·³ ÀÌ ¿¹Á¦¿¡ ÀÖ´Â ÅÂ±× À̸§("someObject" ¹× "run")Àº ÀÓÀÇÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ Å±״ ȮÀåÁ¡ ½ºÅ°¸¶¿¡¼ Á¤ÀÇÇÕ´Ï´Ù.
ÀÌ ¿¹Á¦ÀÇ °æ¿ì ½ÇÇà ÆÄÀÏ È®ÀåÀÚÀÇ ÀÎÅÍÆäÀ̽º¸¦ ISomeInterface¶ó°í Çß½À´Ï´Ù. È®ÀåÁ¡ÀÇ Ç÷¯±×Àο¡ ÀÖ´Â ´ÙÀ½ ÄÚµå ½º´ÏÆê¿¡¼´Â Ç÷¯±×ÀÎ ·¹Áö½ºÆ®¸®¸¦ Á¶È¸Çϰí "sampleExtensionPoint" È®ÀåÁ¡ÀÇ ¸ðµç ½ÇÇà ÆÄÀÏ È®ÀåÀ» ÀνºÅϽºÈÇÕ´Ï´Ù.
IPluginRegistry registry = Platform.getPluginRegistry(); IExtensionPoint point = registry.getExtensionPoint("org.eclipse.sample.sampleExtensionPoint"); IExtension[] extensions = point.getExtensions(); for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] elements = extensions[i].getConfigurationElements(); for (int j = 0; j < elements.length; j++) { if ("someObject".equals(elements[j].getName())) { ISomeInterface object = (ISomeInterface)elements[j].createExecutableExtension("run"); System.out.println("Found an executable extension: " + object); } } }
À̰ÍÀ¸·Î ¸ðµç °ÍÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù! ÀÚ¼¼ÇÑ Á¤º¸¸¦ º¸·Á¸é org.eclipse.core.runtime ÆÐŰÁöÀÇ javadoc¸¦ ã¾Æº¸°Å³ª readme µµ±¸¿¡ Á¤ÀÇµÈ È®ÀåÁ¡À» Á¶È¸ÇϽʽÿÀ. ¼³Ä¡ ÁöħÀº ¿¹Á¦ ¾È³»¼¸¦ ÂüÁ¶ÇϽʽÿÀ. °¡Àå ÁÁÀº ¿¹Á¦´Â Eclipse Ç÷§Æû¿¡¼ Á¤ÀÇÇÑ È®ÀåÁ¡À» Á¶È¸ÇÏ´Â °ÍÀÔ´Ï´Ù.