Java ÄÚµå ÄÄÆÄÀÏ

JDT Ç÷¯±×Àο¡´Â ¼Ò½º Äڵ忡¼­ Java .class ÆÄÀÏÀ» ºôµåÇÏ´Â ÁõºÐ ¹× Àϰýó¸® Java ÄÄÆÄÀÏ·¯°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. API´Â ÄÄÆÄÀÏ·¯°¡ Á÷Á¢ Á¦°øÇÏÁö ¾ÊÀ¸¸ç, Java ÇÁ·ÎÁ§Æ®¿¡ ºô´õ·Î ¼³Ä¡µË´Ï´Ù. ÄÄÆÄÀÏÀº Ç¥ÁØ Ç÷§Æû ºôµå ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÏ¿© Æ®¸®°ÅµË´Ï´Ù.

Ç÷§Æû ºôµå ¸ÞÄ¿´ÏÁòÀº ÁõºÐ ÇÁ·ÎÁ§Æ® ºô´õ¿¡¼­ ÀÚ¼¼È÷ ¼³¸íÇÕ´Ï´Ù.

ÄÚµå ÄÄÆÄÀÏ

ºôµå API¸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®ÀÇ Java ¼Ò½º ÆÄÀÏÀ» ÇÁ·Î±×·¥¿¡ µû¶ó ÄÄÆÄÀÏÇÒ ¼ö ÀÖ½À´Ï´Ù.

   IProject myProject;
IProgressMonitor myProgressMonitor;
myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);

Java ÇÁ·ÎÁ§Æ®¿¡¼­´Â ÀÌ Äڵ尡 Java ÁõºÐ ÇÁ·ÎÁ§Æ® ºô´õ¸¦ ÇÁ·ÎÁ§Æ®ÀÇ ºôµå ½ºÆå¿¡ Ãß°¡µÈ ´Ù¸¥ ÁõºÐ ÇÁ·ÎÁ§Æ® ºô´õ¿Í ÇÔ²² È£ÃâÇÕ´Ï´Ù. »ý¼ºµÈ .class ÆÄÀÏÀº ÁöÁ¤µÈ Ãâ·Â Æú´õ¿¡ ±â·ÏµË´Ï´Ù. Ãß°¡ ÀÚ¿ø ÆÄÀÏÀº Ãâ·Â Æú´õ¿¡µµ º¹»çµË´Ï´Ù. 

Àüü Àϰýó¸® ºôµåÀÇ °æ¿ì Ãâ·Â Æú´õ¿¡ ÀÖ´Â ¸ðµç .class ÆÄÀÏÀº ¹«È¿ ÆÄÀÏÀÌ ¾øµµ·Ï 'Á¤¸®'µÉ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº JDT ÄÚ¾î ºô´õ ¿É¼Ç (CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER) À» »ç¿ëÇÏ¿© Á¦¾îµË´Ï´Ù.  ÀÌ ¿É¼ÇÀÇ ±âº»°ªÀº Ãâ·Â Æú´õ¸¦ Á¤¸®ÇÏ´Â °ÍÀÔ´Ï´Ù.  ÀÌ ¿É¼ÇÀ» Àç¼³Á¤ÇÏ´Â °æ¿ì¸¦ Á¦¿ÜÇϰí ÇØ´ç ¼Ò½º ÆÄÀÏÀÌ ¾ø´Â ¸ðµç .class ÆÄÀÏÀ» Ãâ·Â Æú´õ ´ë½Å Ŭ·¡½º °æ·Î¿¡ ÀÖ´Â º°µµÀÇ Å¬·¡½º ÆÄÀÏ Æú´õ¿¡ ³õ¾Æ¾ß ÇÕ´Ï´Ù.

ÁõºÐ ºô´õ ¹× Àϰýó¸® ºô´õ´Â Ãâ·Â Æú´õ¿¡ º¹»çÇÏ´Â ÀÚ¿øÀ» Á¦¾îÇÏ´Â ´Ù¸¥ ¿É¼ÇÀ» »ç¿ëÇÏ¿© ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.  ´ÙÀ½ »ùÇÃÀº '.ignore'·Î ³¡³ª´Â ÆÄÀϰú À̸§ÀÌ 'META-INF'ÀÎ Æú´õ°¡ Ãâ·Â Æú´õ¿¡ º¹»çµÇÁö ¾Êµµ·Ï ÇÏ´Â ÀÚ¿ø ÇÊÅ͸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

   Hashtable options = JavaCore.getOptions();
   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
   JavaCore.setOptions(options);

ÆÄÀÏ À̸§Àº Á¦°øµÈ ÆÐÅÏ Áß Çϳª¿Í ÀÏÄ¡ÇÒ °æ¿ì ÇÊÅ͸µµË´Ï´Ù. Àüü Æú´õ´Â Æú´õÀÇ À̸§ÀÌ °æ·Î ºÐ¸®ÀÚ·Î ³¡³ª´Â Á¦°øµÈ Æú´õ À̸§ Áß Çϳª¿Í ÀÏÄ¡ÇÏ´Â °æ¿ì ÇÊÅ͸µµË´Ï´Ù.

.classpath ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖÀ» ¶§ ´ÜÀÏ ¿À·ù¸¸ »ý¼ºÇϵµ·Ï ÁõºÐ ¹× Àϰýó¸® ºô´õ¸¦ ±¸¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¿É¼ÇÀº ±âº»ÀûÀ¸·Î ¼³Á¤µÇ¸ç ¸¹Àº ¿À·ù¸¦ Á¦°ÅÇÕ´Ï´Ù.   ºô´õ °ü·Ã ¿É¼Ç ¹× ±âº»°ªÀÇ Àüü ¸ñ·ÏÀº JDT ÄÚ¾î ºô´õ ¿É¼ÇÀ» ÂüÁ¶ÇϽʽÿÀ.

ÄÄÆÄÀÏ·¯´Â JavaCore ¿É¼ÇÀ» »ç¿ëÇÏ¿© ±¸¼ºµÉ ¼öµµ ÀÖ½À´Ï´Ù.   ¿¹¸¦ µé¾î, ÄÄÆÄÀÏ Áß ¹ß»ýÇÏ´Â ¿©·¯ Á¾·ùÀÇ ¹®Á¦Á¡¿¡ »ç¿ëÇØ¾ß ÇÏ´Â ½É°¢µµ¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.  ÄÄÆÄÀÏ·¯ °ü·Ã ¿É¼Ç ¹× ±âº»°ªÀÇ Àüü ¸ñ·ÏÀº JDT ÄÚ¾î ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» ÂüÁ¶ÇϽʽÿÀ.

ºô´õ ¶Ç´Â ÄÄÆÄÀÏ·¯ÀÇ ¿É¼ÇÀ» ÇÁ·Î±×·¥¿¡ µû¶ó ±¸¼ºÇÒ °æ¿ì, ¿É¼Ç ¹üÀ§¸¦ Á¤ÇØ¾ß ÇÕ´Ï´Ù.  ¿¹¸¦ µé¾î, ÀÚ¿ø ÇÊÅ͸¦ ¼³Á¤ÇÏ¸é Æ¯Á¤ ÇÁ·ÎÁ§Æ®¿¡¸¸ Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.  ´ÙÀ½ ¿¹Á¦´Â ÀÌÀü¿¡ Ç¥½ÃµÈ °Í°ú °°Àº ÀÚ¿ø ÇÊÅ͸¦ ¼³Á¤ÇÏÁö¸¸ °³º° ÇÁ·ÎÁ§Æ®¸¸ ¼³Á¤ÇÕ´Ï´Ù.

   
   Hashtable options = myProject.getOptions(false);  // get only the options set up in this project
   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
   myProject.setOptions(options);

Ant javac ¾î´ðÅÍ »ç¿ë

Eclipse ÄÄÆÄÀÏ·¯¸¦ javac ¾î´ðÅ͸¦ »ç¿ëÇÏ´Â Ant ½ºÅ©¸³Æ® ³»ºÎ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Eclipse ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ·Á¸é ½ºÅ©¸³Æ®¿¡ build.compiler Ư¼ºÀ» Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½Àº °£´ÜÇÑ ¿¹Á¦ÀÔ´Ï´Ù.
<?xml version="1.0" encoding="UTF-8" ?>
<project name="compile" default="main" basedir="../.">

	<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

	<property name="root" value="${basedir}/src"/>

	<property name="destdir" value="d:/temp/bin" />

	<target name="main">
		<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
		    <classpath>
		      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
		    </classpath>
		</javac>		
	</target>
</project>
javac Ant Ÿ½ºÅ©¿¡ »ç¿ëµÈ ±¸¹®Àº Ant javac Ÿ½ºÅ© ¹®¼­¿¡ ÀÖ½À´Ï´Ù. ÇöÀç ¾î´ðÅÍ´Â Javac Ant Ÿ½ºÅ© 1.4.1À» Áö¿øÇÕ´Ï´Ù. 1.5 ¹öÀüÀº Ant 1.5°¡ ¸±¸®½ºµÉ ¶§ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¹®Á¦Á¡ ÆÇº°

JDT ÄÚ¾î´Â Ư¼ö ¸¶Ä¿(¸¶Ä¿ À¯Çü "org.eclipse.jdt.core.problem")¸¦ Á¤ÀÇÇÏ¿© ÄÄÆÄÀÏ ¹®Á¦Á¡À» ¼±¾ðÇÕ´Ï´Ù. ÄÄÆÄÀÏ·¯°¡ ¹ß°ßÇÑ ¹®Á¦Á¡À» ÇÁ·Î±×·¥¿¡ µû¶ó ãÀ¸·Á¸é Ç¥ÁØ Ç÷§Æû ¸¶Ä¿ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¸¶Ä¿ »ç¿ë¿¡ ´ëÇÑ °³¿ä´Â ÀÚ¿ø ¸¶Ä¿¸¦ ÂüÁ¶ÇϽʽÿÀ.

´ÙÀ½ ½º´ÏÆêÀº ÄÄÆÄÀÏ ´ÜÀ§ÀÇ ¸ðµç Java ¹®Á¦Á¡ ¸¶Ä¿¸¦ ã½À´Ï´Ù.

   public IMarker[] findJavaProblemMarkers(ICompilationUnit cu)
      throws CoreException {
      IResource javaSourceFile = cu.getUnderlyingResource();
      IMarker[] markers =
         javaSourceFile.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER,
            true, IResource.DEPTH_INFINITE);
   }

Java ¹®Á¦Á¡ ¸¶Ä¿´Â Java ÇÁ·ÎÁ§Æ® ºô´õ°¡ À¯Áöº¸¼öÇϸç, ¹®Á¦Á¡ÀÌ ºÐ¼®µÇ°í Java ¼Ò½º°¡ ´Ù½Ã ÄÄÆÄÀ쵃 ¶§ ÀÚµ¿À¸·Î Á¦°ÅµË´Ï´Ù.

¹®Á¦Á¡ ID °ªÀº IProblem¿¡ ÀÖ´Â »ó¼ö Áß Çϳª·Î ¼³Á¤ÇÕ´Ï´Ù. ¹®Á¦Á¡ÀÇ ID´Â È®½ÇÇÏÁö¸¸ ¸Þ½ÃÁö´Â ¹ø¿ªµÇ¹Ç·Î ±âº» ·ÎÄÉÀÏ¿¡ µû¶ó º¯°æµÉ ¼ö ÀÖ½À´Ï´Ù. IProblem¿¡ Á¤ÀÇµÈ »ó¼ö´Â ÀÚü ¼³¸íÀûÀÔ´Ï´Ù.

Java Á¶ÀÛ Áß ¹ß°ßµÈ ¹®Á¦Á¡À» ¼öÁýÇÏ·Á¸é IProblemRequestorÀÇ ±¸ÇöÀ» Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ÀÛ¾÷ ÁßÀÎ »çº» »ý¼º¿¡ ´ëÇØ IProblemRequestor¸¦ Á¦°øÇÑ °æ¿ì ÀÛ¾÷ ÁßÀÎ »çº»Àº ¹®Á¦Á¡ ŽÁö¸¦ ¼ö¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀ» ¼öÇàÇϱâ À§ÇØ reconcile ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº Ư¼º º¸±âÀÇ ¿¹Á¦ÀÔ´Ï´Ù.

  ICompilationUnit unit = ..; // get some compilation unit
			
  // create requestor for accumulating discovered problems
  IProblemRequestor problemRequestor = new IProblemRequestor() {
    public void acceptProblem(IProblem problem) {
      System.out.println(problem.getID() + ": " + problem.getMessage());
    }
    public void beginReporting() {}
    public void endReporting() {}
    public boolean isActive() {	return true; } // will detect problems if active
  };
    
  // use working copy to hold source with error
  IWorkingCopy workingCopy = (IWorkingCopy)unit.getWorkingCopy(null, null, problemRequestor);
  ((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");

  // trigger reconciliation			
  workingCopy.reconcile(true, null);
acceptProblem(IProblem) ¸Þ¼Òµå¿¡ º¸°íµÈ ¹®Á¦Á¡¿¡ ´ëÇÑ Á¶Ä¡¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼­ º¸°íµÈ ¹®Á¦´Â Zork¸¦ ºÐ¼®ÇÒ ¼ö ¾ø°Å³ª Zork°¡ ¿Ã¹Ù¸¥ ¼öÆÛŬ·¡½º°¡ ¾Æ´Ï°í ZorkÀÇ ID°¡ IProblem.SuperclassNotFound¶ó´Â Á¡ÀÔ´Ï´Ù.

Copyright IBM Corporation and others 2000, 2003. All Rights Reserved.