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);
<?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¶ó´Â Á¡ÀÔ´Ï´Ù.