ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀº Ç÷¯±×ÀÎÀÌ ÇÁ·ÎÁ§Æ®¸¦ ƯÁ¤ À¯ÇüÀÇ ÇÁ·ÎÁ§Æ®·Î ű×ÈÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î 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();