¸µÅ©µÈ ÀÚ¿ø

ÀÌÀüÀÇ ÀÚ¿ø ¹× ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ ¼³¸í(ÀÚ¿øÀ» µð½ºÅ© À§Ä¡ ¸ÊÇÎ)Àº ÇÁ·ÎÁ§Æ®ÀÇ ¸ðµç ÀÚ¿øÀÌ ÆÄÀÏ ½Ã½ºÅÛ°ú °°Àº À§Ä¡¿¡ ÀÖ´Â °ÍÀ¸·Î °£ÁÖÇÕ´Ï´Ù.  À̰ÍÀº ÀϹÝÀûÀ¸·Î 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"
   

Copyright IBM Corporation and others 2000, 2003.