ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀº Ç÷¯±×ÀÎÀÌ ÇÁ·ÎÁ§Æ®¸¦ ƯÁ¤ À¯ÇüÀÇ ÇÁ·ÎÁ§Æ®·Î ű×ÈÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î JDT(Java Development Tool)´Â "Java ¼Ó¼º"À» »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¿¡ Java ƯÁ¤ ÀÛµ¿À» Ãß°¡ÇÕ´Ï´Ù. ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀº Ç÷¯±×Àο¡¼ Á¤ÀÇÇϰí, ´ë°³ »ç¿ëÀÚ°¡ Ç÷¯±×Àο¡¼ Á¤ÀÇÇÑ ÀϺΠÁ¶Ä¡¸¦ ¼öÇàÇÒ °æ¿ì ÇÁ·ÎÁ§Æ®º°·Î Ãß°¡Çϰųª Á¦°ÅÇÕ´Ï´Ù.
ÇÁ·ÎÁ§Æ®¿¡´Â Çϳª ÀÌ»óÀÇ ¼Ó¼ºÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀ» Á¤ÀÇÇÒ °æ¿ì ¼Ó¼º¿¡ ´ëÇÑ Æ¯¼öÇÑ Á¦ÇÑÁ¶°ÇÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
°íÀ¯ÀÇ ¼Ó¼ºÀ» ±¸ÇöÇÏ·Á¸é È®ÀåÀ» Á¤ÀÇÇϰí IProjectNature¸¦ ±¸ÇöÇϴ Ŭ·¡½º¸¦ Á¦°øÇØ¾ß ÇÕ´Ï´Ù.
org.eclipse.core.resources.natures È®ÀåÁ¡Àº ÇÁ·ÎÁ§Æ® ¼Ó¼º Á¤ÀǸ¦ Ãß°¡ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ´ÙÀ½ ¸¶Å©¾÷Àº °¡»óÀÇ com.example.natures Ç÷¯±×Àο¡ ¼Ó¼ºÀ» Ãß°¡ÇÕ´Ï´Ù.
<extension point="org.eclipse.core.resources.natures" id="myNature" name="My Nature"> <runtime> <run class="com.example.natures.MyNature"> </run> </runtime> </extension>
È®Àå¿¡¼ ½Äº°µÈ Ŭ·¡½º´Â Ç÷§Æû ÀÎÅÍÆäÀ̽º IProjectNature¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ÀÌ Å¬·¡½º´Â ¼Ó¼ºÀÌ ±¸¼ºµÉ ¶§ ¼Ó¼º ƯÁ¤ Á¤º¸¸¦ ÇÁ·ÎÁ§Æ®¿Í ¿¬°ü½Ã۱â À§ÇÑ Ç÷¯±×ÀΠƯÁ¤ ÀÛµ¿À» ±¸ÇöÇÕ´Ï´Ù.
public class MyNature implements IProjectNature { private IProject project; public void configure() throws CoreException { // Add nature-specific information // for the project, such as adding a builder // to a project's build spec. } public void deconfigure() throws CoreException { // Remove the nature-specific information here. } public IProject getProject() { return project; } public void setProject(IProject value) { project = value; } }
configure() ¹× deconfigure() ¸Þ¼Òµå´Â ÇÁ·ÎÁ§Æ®¿¡ ¼Ó¼ºÀÌ Ãß°¡µÇ°Å³ª Á¦°ÅµÉ ¶§ Ç÷§Æû¿¡¼ Àü¼ÛµË´Ï´Ù. configure() ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ¿© ºô´õ¿¡ ¼³¸íµÈ ´ë·Î ÇÁ·ÎÁ§Æ®¿¡ ºô´õ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÇÁ·ÎÁ§Æ®¿¡ ¿¬°ü½ÃŰ´Â µ¥ ¼Ó¼º Á¤Àǰ¡ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù. ¼Ó¼ºÀ» Æ÷ÇÔÇϵµ·Ï ÇÁ·ÎÁ§Æ®ÀÇ ¼³¸íÀ» °»½ÅÇÏ¿© ÇÁ·ÎÁ§Æ®¿¡ ¼Ó¼ºÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. À̰ÍÀº ´ë°³ ¼Ó¼ºÀ» ÁöÁ¤Çϴ Ư¼öÇÑ »õ ÇÁ·ÎÁ§Æ® ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ°¡ »õ ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇÒ ¶§ ¹ß»ýÇÕ´Ï´Ù. ´ÙÀ½ ½º´ÏÆê¿¡¼´Â ÁöÁ¤ÇÑ ÇÁ·ÎÁ§Æ®¿¡ »õ ¼Ó¼ºÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
try { IProjectDescription description = project.getDescription(); String[] natures = description.getNatureIds(); String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = "com.example.natures.myNature"; description.setNatureIds(newNatures); project.setDescription(description, null); } catch (CoreException e) { // Something went wrong }
ÇÁ·ÎÁ§Æ® ¼³¸íÀ» ÇÁ·ÎÁ§Æ®¿¡ ¼³Á¤ÇÒ ¶§±îÁö ¼Ó¼ºÀº ½ÇÁ¦·Î ÇÁ·ÎÁ§Æ®¿¡ ÁöÁ¤(±¸¼º)µÇÁö ¾Ê½À´Ï´Ù. ¼Ó¼º¿¡ »ç¿ëµÇ´Â ID´Â ¼Ó¼º È®ÀåÀÇ ¿ÏÀüÇÑ À̸§(Ç÷¯±×ÀÎ ID + È®Àå ID)ÀÔ´Ï´Ù.
Á¦ÇÑÁ¶°ÇÀ» »ç¿ëÇÏ¿© ¼Ó¼ºÀ» Á¤ÀÇÇÑ °æ¿ì ÀÛ¾÷°ø°£ API¸¦ »ç¿ëÇÏ¿© »õ ¼Ó¼ºÀÇ À¯È¿¼ºÀ» °ËÁõÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ÀüÁ¦Á¶°ÇÀ» »ç¿ëÇÏ¿© ¼Ó¼ºÀ» Á¤ÀÇÇÏ´Â °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù.
<extension point="org.eclipse.core.resources.natures" id="myOtherNature" name="My Other Nature"> <runtime> <run class="com.example.natures.MyOtherNature"> </run> </runtime> <requires-nature id="com.example.natures.myNature"/> </extension>
ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Ã¹ ¹øÂ° ¼Ó¼ºÀÌ ¾øÀ¸¸é »õ ¼Ó¼ºÀº À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. Ç÷¯±×ÀÎÀÇ µðÀÚÀο¡ µû¶ó ÀüÁ¦Á¶°Ç ¼Ó¼ºÀÌ ¼³Ä¡µÇ¾ú´ÂÁö È®ÀÎÇϰųª ÀüÁ¦Á¶°Ç ¼Ó¼ºÀ» Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾î´À ¹æ¹ýÀ̵ç ÀÛ¾÷°ø°£ API¸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀÇ Á¦¾ÈµÈ Á¶ÇÕÀÇ À¯È¿¼ºÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
try { IProjectDescription description = project.getDescription(); String[] natures = description.getNatureIds(); String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = "com.example.natures.myOtherNature"; IStatus status = workspace.validateNatureSet(natures); // check the status and decide what to do if (status.getCode() == IStatus.OK) { description.setNatureIds(newNatures); project.setDescription(description, null); } else { // raise a user error ... } } catch (CoreException e) { // Something went wrong }
ID·Î ¼Ó¼º¿¡ ´ëÇØ ÀÛ¾÷ÇÏ´Â °Í ¿Ü¿¡ ¼Ó¼º, ¼Ó¼ºÀÇ Á¦ÇÑÁ¶°Ç ¹× ·¹À̺íÀ» ¼³¸íÇÏ´Â ¼³¸íÀÚ(IProjectNatureDescriptor)¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ¼³¸íÀÚÀÇ Æ¯Á¤ ¼Ó¼ºÀ» Á¶È¸Çϰųª, ÀÛ¾÷°ø°£¿¡¼ ¼³¸íÀÚ¸¦ °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ½º´ÏÆê¿¡¼´Â »õ ¼Ó¼º¿¡ ´ëÇÑ ÇÁ·ÎÁ§Æ® ¼Ó¼º ¼³¸íÀÚ¸¦ °¡Á®¿É´Ï´Ù.
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");
¼³Ä¡µÈ ¸ðµç ¼Ó¼º¿¡ ´ëÇØ ¼³¸íÀÚ ¹è¿À» °¡Á®¿Ã ¼öµµ ÀÖ½À´Ï´Ù.
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();