ÀÌÀüÀÇ ÀÚ¿ø ¹× ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ ¼³¸í(ÀÚ¿øÀ» µð½ºÅ© À§Ä¡ ¸ÊÇÎ)Àº ÇÁ·ÎÁ§Æ®ÀÇ ¸ðµç ÀÚ¿øÀÌ ÆÄÀÏ ½Ã½ºÅÛ°ú °°Àº À§Ä¡¿¡ ÀÖ´Â °ÍÀ¸·Î °£ÁÖÇÕ´Ï´Ù. À̰ÍÀº ÀϹÝÀûÀ¸·Î trueÀÔ´Ï´Ù. ±×·¯³ª, ÇÁ·ÎÁ§Æ® ³»ºÎÀÇ ÆÄÀϰú Æú´õ°¡ ÇÁ·ÎÁ§Æ® À§Ä¡ÀÇ ¿ÜºÎ¿¡ ÀÖ´Â ÆÄÀÏ ½Ã½ºÅÛ¿¡ ÀúÀåµÉ ¼ö ÀÖµµ·Ï Workbench¿¡¼ ¸µÅ©µÈ ÀÚ¿øÀ̶ó´Â °³³äÀÌ Á¦°øµË´Ï´Ù.
¸µÅ©µÈ ÀÚ¿ø¿¡´Â »óÀ§ ÀÚ¿øÀ¸·Î ÇÁ·ÎÁ§Æ®°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¸µÅ©µÈ ÀÚ¿øÀº ½ÇÁ¦·Î ÆÄÀÏ ½Ã½ºÅÛ ¾îµð¿¡µç À§Ä¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸µÅ©µÈ ÀÚ¿øÀº ÇÁ·ÎÁ§Æ® À§Ä¡ ¿ÜºÎ¿¡ »óÁÖÇϰųª ´Ù¸¥ ÇÁ·ÎÁ§Æ® ³»¿¡µµ »óÁÖÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸µÅ©µÈ ÀÚ¿ø À§Ä¡¿¡ ´ëÇÑ ¸î °¡ÁöÀÇ Á¦ÇÑ»çÇ׸¸ ÀÖ½À´Ï´Ù. ¸Þ¼Òµå IWorkspace.validateLinkLocationÀº ÁöÁ¤µÈ À§Ä¡°¡ ¸µÅ©µÈ ÀÚ¿øÀ» ÀÛ¼ºÇÏ´Â µ¥ ¿Ã¹Ù¸¥Áö È®ÀÎÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
¸µÅ©µÈ ÀÚ¿øÀº ¸Þ¼Òµå IFolder.createLink
¶Ç´Â IFile.createLink¸¦
»ç¿ëÇÏ¿© ÀÛ¼ºµË´Ï´Ù.
Á¦°øµÈ ÀÚ¿øÀÌ ¸µÅ©µÈ ÀÚ¿øÀÎÁö ¿©ºÎ¸¦ ÇÁ·Î±×·¥¿¡ µû¶ó ÆÇº°ÇÏ·Á¸é,
¸Þ¼Òµå IResource.isLinked¸¦
»ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¸Þ¼Òµå´Â ¸µÅ©µÈ ÀÚ¿øÀÇ ÇÏÀ§°¡ ¾Æ´Ñ ¸µÅ©µÈ ÀÚ¿ø¿¡ ´ëÇØ¼¸¸ true
¸¦
¸®ÅÏÇÔ¿¡ À¯ÀÇÇϽʽÿÀ.
¸µÅ©µÈ ÀÚ¿ø ÀÛ¼º ¹× ÀÚ¿øÀÌ ¸µÅ©µÇ¾ú´ÂÁö¸¦ ¹ß°ßÇÏ´Â ÀÌ·¯ÇÑ Æ¯¼ö ¸Þ¼Òµå¿Í´Â º°µµ·Î ¸µÅ©µÈ ÀÚ¿øÀ» Á¶ÀÛÇÒ ¶§ ÀÏ¹Ý ÀÛ¾÷°ø°£ API¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ëºÎºÐ ¸µÅ©µÈ ÀÚ¿øÀº ÀÛ¾÷°ø°£¿¡¼ Á¤È®È÷ ´Ù¸¥ ÀÚ¿øÃ³·³ ÀÛµ¿ÇÕ´Ï´Ù. ±×·¯³ª ¸µÅ©µÈ ÀÚ¿øÀ» À̵¿, º¹»ç ¶Ç´Â »èÁ¦ÇÒ ¶§ ÀϺΠÁ¦ÇÑ»çÇ×ÀÌ Àû¿ëµË´Ï´Ù. °³º° Á¶ÀÛ ¹× ÇØ´ç Á¦ÇÑ»çÇ׿¡ ´ëÇÑ Á¤º¸´Â IResource ¹× ÇØ´ç ¼ºêŬ·¡½º¸¦ ÂüÁ¶ÇϽʽÿÀ.
°æ·Î º¯¼ö´Â ¸µÅ©µÈ ÀÚ¿øÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¶§ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. °æ·Î º¯¼ö´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ À§Ä¡¿¡ ¹Ù·Î °¡±â¸¦ Á¤ÀÇÇÏ´Â °£´ÜÇÑ(¹®ÀÚ¿ -> IPath) ¸ÊÇÎÀÔ´Ï´Ù. º¯¼ö´Â Çϵå ÄÚµåµÈ Àý´ë ÆÄÀÏ ½Ã½ºÅÛ °æ·Î°¡ »ç¿ëµÇ´Â À§Ä¡ÀÇ ¼ö¸¦ °¨¼Ò½ÃÄÑ ¸µÅ©µÈ ÀÚ¿øÀÇ °ü¸®¸¦ ¼ö¿ùÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
°æ·Î º¯¼ö´Â ´ÙÀ½°ú °°ÀÌ ¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î »ç¿ëÀÚ°¡ ¸µÅ©µÈ ÀÚ¿øÀ» È¿À²ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù.
ÀÌ ¸ñ·ÏÀÇ ¸¶Áö¸· Ç׸ñ¿¡´Â ¾à°£ÀÇ ¼³¸íÀÌ ÇÊ¿äÇÕ´Ï´Ù.
ÇÁ·ÎÁ§Æ®¿¡ ¸µÅ©µÈ ÀÚ¿øÀ» ÀÛ¼ºÇÒ ¶§ ¸µÅ©µÈ ÀÚ¿øÀÇ ¼³¸íÀº ÇÁ·ÎÁ§Æ® À§Ä¡ÀÇ
ÇÁ·ÎÁ§Æ® ¼³¸í ÆÄÀÏ(".project")¿¡ Ãß°¡µË´Ï´Ù.
°æ·Î º¯¼ö¸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦
°øÀ¯Çϰí(ÇÁ·ÎÁ§Æ® ÄÁÅÙÃ÷¸¦ º¹»çÇϰųª ÀúÀå¼Ò¸¦ »ç¿ëÇÏ¿©) °¢ °³º°
¿öÅ©½ºÅ×À̼ǿ¡ ÀûÇÕÇÑ º¯¼ö¸¦ ´Ù½Ã Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î, ÇÑ »ç¿ëÀÚ´Â ½Ã½ºÅÛÀÇ c:\temp ¾Æ·¡ ¿ÜºÎ ÀÚ¿øÀ» ÀúÀåÇÒ ¼ö ÀÖ´Â ¹Ý¸é
Unix¸¦ »ç¿ëÇÏ´Â ´Ù¸¥ »ç¿ëÀÚ´Â /home/username/tmp¿¡ µ¿ÀÏÇÑ ÀÚ¿øÀ» ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.
°¢ ÀÛ¾÷ °ø°£(TEMP=c:\temp
¹× TEMP=/home/userb/tmp)
¿¡ °æ·Î º¯¼ö¸¦
Á¤ÀÇÇϸé ÀÌ Â÷ÀÌÁ¡À» ÇØ°áÇÏ¿© ÇöÀç ±×´ë·Î ¸µÅ©µÈ ÀÚ¿ø°ú ÇÁ·ÎÁ§Æ®¸¦ °øÀ¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.
IPathVariableManager´Â °æ·Î º¯¼ö¸¦ ÀÛ¼º, Á¶ÀÛ ¹× ºÐ¼®ÇÏ´Â µ¥ ÇÊ¿äÇÑ API¸¦ Á¤ÀÇÇÕ´Ï´Ù. ¶ÇÇÑ ÀÛ¼ºÇϱâ Àü¿¡ º¯¼ö À̸§ ¹× °ªÀ» À¯È¿¼º °Ë»çÇϰí, °æ·Î º¯¼ö Á¤ÀǸ¦ º¯°æÇÒ ¶§ Å뺸Çϵµ·Ï ¸®½º³Ê¸¦ ¼³Ä¡Çϱâ À§ÇØ ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù. IWorkspace.getPathVariableManager¸¦ »ç¿ëÇÏ¿© ÀÌ Å¬·¡½ºÀÇ ÀνºÅϽº¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ÀÌ Àý ³¡¿¡ ÀÖ´Â ÄÚµå ¿¹Á¦¸¦ ÂüÁ¶ÇϽʽÿÀ.
¸Þ¼Òµå IResource.getRawLocationÀº ¸µÅ©µÈ ÀÚ¿øÀÇ ºÐ¼®µÇÁö ¾ÊÀº À§Ä¡¸¦ ã´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. Áï, °æ·Î º¯¼ö¸¦ ÇØ´ç °ªÀ¸·Î ºÐ¼®ÇÏ´Â ´ë½Å ½ÇÁ¦ °æ·Î º¯¼ö À̸§À» °¡Á®¿É´Ï´Ù. ÀÚ¿ø À§Ä¡°¡ °æ·Î º¯¼ö·Î Á¤ÀǵÇÁö ¾ÊÀº °æ¿ì getRawLocation ¸Þ¼Òµå´Â getLocation ¸Þ¼Òµå¿Í ¶È°°ÀÌ ÀÛµ¿ÇÕ´Ï´Ù.
ÀÚ¿øÀ» ÇÁ·Î±×·¥¿¡ µû¶ó Á¶ÀÛÇϴ Ŭ¶óÀÌ¾ðÆ®´Â Áß´Ü ¸µÅ©ÀÇ °¡´É¼ºÀ» ÀνÄÇØ¾ß ÇÕ´Ï´Ù. Áß´Ü ¸µÅ©´Â ¸µÅ©µÈ ÀÚ¿øÀÇ À§Ä¡°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª Á¤ÀǵÇÁö ¾ÊÀº °æ·Î º¯¼ö¿¡ »ó´ëÀûÀÎ À§Ä¡°¡ ÁöÁ¤µÉ ¶§ ¹ß»ýÇÕ´Ï´Ù. IResource ÇÁ·ÎÅäÄÝ »ç¿ë ½Ã ´ÙÀ½°ú °°Àº Ư¼öÇÑ °æ¿ì°¡ Àû¿ëµË´Ï´Ù.
³Î
À» ¸®ÅÏÇÕ´Ï´Ù.
ÀϺΠÇ÷¯±×ÀÎÀº ¸µÅ©µÈ ÀÚ¿øÀ» ó¸®ÇÒ ¼ö ¾øÀ¸¹Ç·Î ¸µÅ©µÈ ÀÚ¿øÀ» »ç¿ë ºÒ°¡´ÉÇÏ°Ô ÇÒ ¼ö ÀÖ´Â ¿©·¯ °¡Áö ¸ÞÄ¿´ÏÁòÀÌ ÀÖ½À´Ï´Ù. ¸ðµç ÇÁ·ÎÁ§Æ® ÄÁÅÙÃ÷°¡ ÇÁ·ÎÁ§Æ®ÀÇ ±âº» À§Ä¡¿¡ ¹Ýµå½Ã ÀÖ¾î¾ß ÇÏ´Â Ç÷¯±×ÀÎÀ» ÀÛ¼ºÇÏ·Á´Â °æ¿ì »ç¿ëÀÚ°¡ ÀÚ¿øÀ» Ç¥½ÃÇÏÁö ¾ÊÀ¸·Á´Â À§Ä¡¿¡ ¸µÅ©µÈ ÀÚ¿øÀ» ÀÛ¼ºÇÏÁö ¸øÇϵµ·Ï ÀÌ·¯ÇÑ ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ù ¹øÂ° ¸ÞÄ¿´ÏÁòÀº ÇÁ·ÎÁ§Æ® ¼Ó¼º °ÅºÎ¶ó°í ÇÕ´Ï´Ù.
»ç¿ëÀÚ °íÀ¯ÀÇ ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀ» Á¤ÀÇÇÏ·Á¸é, ¼Ó¼ºÀÌ ¸µÅ©µÈ
ÀÚ¿ø°ú ȣȯµÇÁö ¾Êµµ·Ï ¼Ó¼º Á¤ÀÇ¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½Àº ¼Ó¼º °ÅºÎ¸¦ »ç¿ëÇÏ´Â ¼Ó¼º Á¤ÀÇÀÇ ¿¹Á¦ÀÔ´Ï´Ù.
<extension
id="myNature"
name="My Nature"
point="org.eclipse.core.resources.natures">
<runtime>
<run class="com.xyz.MyNature"/>
</runtime>
<options allowLinking="false"/>
</extension>
¸µÅ©µÈ ÀÚ¿øÀÌ ÀÛ¼ºµÇÁö ¾Êµµ·Ï ÇÏ´Â µÎ ¹øÂ° ¸ÞÄ¿´ÏÁòÀº ÆÀ ÈÄÅ©ÀÔ´Ï´Ù. »ç¿ëÀÚ °íÀ¯ÀÇ ÀúÀå¼Ò ±¸ÇöÀ» Á¤ÀÇÇÏ´Â °æ¿ì org.eclipse.core.resources.teamHook È®ÀåÁ¡À» »ç¿ëÇÏ¿© ÀúÀå¼Ò À¯Çü°ú °øÀ¯ÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡ ¸µÅ©µÈ ÀÚ¿øÀÌ ÀÛ¼ºµÇÁö ¾Êµµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±âº»ÀûÀ¸·Î ÀúÀå¼Ò Á¦°ø¾÷ü´Â ÀúÀå¼Ò¿¡ ¿¬°áµÈ ÇÁ·ÎÁ§Æ®¿¡ ¸µÅ©µÈ ÀÚ¿øÀÌ ³õÀ̵µ·Ï Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.
ÀúÀå¼Ò Áö¿øÀÌ ¸µÅ©µÈ ÀÚ¿øÀ» ÀνÄÇÏÁö ¾Ê´Â ÀÌÀü Ç÷¯±×ÀÎÀ» ÅëÇØ Á¦°øµÇ´Â °æ¿ì, ÇØ´ç ÇÁ·ÎÁ§Æ®¿¡ ¸µÅ©µÈ ÀÚ¿øÀ» ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù.
ÀÌ¿¡ µû¶ó Àüü ÀÛ¾÷°ø°£°ú °ü·ÃÇÏ¿© ¸µÅ©µÈ ÀÚ¿øÀ» »ç¿ë ºÒ°¡´É°Ô ÇÏ´Â °æ¿ì
»ç¿ëÇÒ ¼ö Àִ ȯ°æ ¼³Á¤ÀÌ ÀÖ½À´Ï´Ù.
ÀÌ ÀüÀÇ µÎ °¡Áö °ÅºÎ ¸ÞÄ¿´ÏÁòÀÌ ÇÑ ÇÁ·ÎÁ§Æ® ±âÁØÀ¸·Î ÀÛµ¿ÇÏ´Â ¹Ý¸é, ÀÌ È¯°æ ¼³Á¤Àº
ÀÛ¾÷°ø°£ÀÇ ¸ðµç ÇÁ·ÎÁ§Æ®¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.
ÀÌ È¯°æ ¼³Á¤À» ÇÁ·Î±×·¥¿¡ µû¶ó ¼³Á¤ÇÏ·Á¸é ȯ°æ ¼³Á¤
ResourcesPlugin.PREF_DISABLE_LINKING
À» »ç¿ëÇϽʽÿÀ.
ÀÌ ¼³Á¤Àº ÀϹÝÀûÀ¸·Î 1Â÷ ±â´É ȯ°æ ¼³Á¤ ´ëü ¸ÞÄ¿´ÏÁò°ú
ÇÔ²² »ç¿ëµÇ¾î Eclipse ¼³Ä¡ÀÇ 1Â÷ ±â´ÉÀÌ ¸µÅ©µÈ ÀÚ¿øÀ» ²ø ¼ö ÀÖ°Ô ÇÕ´Ï´Ù.
¼³Á¤µÈ °æ¿ì¿¡µµ ȯ°æ ¼³Á¤À»
²¨¼ »ç¿ëÀÚ ¶Ç´Â Ç÷¯±×ÀÎÀÌ ÀÌ ¼³Á¤À» ´ëüÇÒ ¼ö ÀÖÀ½¿¡ À¯ÀÇÇϽʽÿÀ.
Äڵ忡¼ ¸µÅ©µÈ ÀÚ¿øÀÇ »ç¿ë¿¡ ´ëÇÑ ÀϺΠ¿¹Á¦¸¦ »ìÆìº¾´Ï´Ù.
´ÙÀ½°ú °°ÀÌ °æ·Î º¯¼öºÎÅÍ Á¤ÀÇÇÏ¿© ½ÃÀÛÇÕ´Ï´Ù.
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPathVariableManager pathMan = workspace.getPathVariableManager();
String name = "TEMP";
IPath value = new Path("c:\\temp");
if (pathMan.validateName(name).isOK() && pathMan.validateValue(value).isOK()) {
pathMan.setValue(name, value);
} else {
//invalid name or value, throw an exception or warn user
}
ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ °æ·Î º¯¼ö¿Í °ü·ÃµÈ ¸µÅ©µÈ
ÀÚ¿øÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
IProject project = workspace.getProject("Project");//assume this exists
IFolder link = project.getFolder("Link");
IPath location = new Path("TEMP/folder");
if (workspace.validateLinkLocation(location).isOK()) {
link.createLink(location, IResource.NONE, null);
} else {
//invalid location, throw an exception or warn user
}
¸ðµÎ ¿Ï·áÇß½À´Ï´Ù! ÀÌÁ¦ "c:\temp\folder"¿¡ À§Ä¡ÇÑ "Link"¶ó´Â ÀÛ¾÷°ø°£¿¡
¸µÅ©µÈ Æú´õ°¡ ÀÖ½À´Ï´Ù.
¸µÅ©µÈ ÀÚ¿ø°ú °ü·ÃµÈ ´Ù¸¥ ÀÛµ¿ ¸Þ¼Òµå¸¦ ¼³¸íÇÏ´Â ¸µÅ©µÈ ÀÚ¿øÀÇ
ÀϺΠÄÚµå ½º´ÏÆêÀ¸·Î ¸¶¹«¸®ÇÕ´Ï´Ù.
link.getFullPath() ==> "/Project/Link"
link.getLocation() ==> "c:\temp\folder"
link.getRawLocation() ==> "TEMP/folder"
link.isLinked() ==> "true"
IFile child = link.getFile("abc.txt");
child.create(...);
child.getFullPath() ==> "/Project/Link/abc.txt"
child.getLocation() ==> "c:\temp\folder\abc.txt"
child.getRawLocation() ==> "c:\temp\folder\abc.txt"
child.isLinked() ==> "false"