간단한 설명
이 클래스는 편집 용 javax.tools.toolprovider에 포함 된 javacompiler를 사용하고, 해당 경로 생성, 읽기 및 복사를 위해 IO 파일 및 NIO 파일을 사용하며 정규 표현식을 사용하여 패키지 이름 및 디렉토리를 변환합니다. 방금 이런 것들에 대한 결함 내성 통합을 만들었으며 기술적 인 내용이 없으므로 편의를위한 것입니다.
모듈 API
Class DynamicReactor : // 빈 매개 변수 구성 공개 클래스 <?> dynamicCompile (String SRCPath); // 지정된 소스 파일 경로를 입력하십시오. 컴파일 및 복사가 성공하면 클래스의 해당 클래스 인스턴스를 반환합니다. 해당 디렉토리에 해당합니다. 다른 다른 컴파일러를 사용하는 경우 적절한 수정을 위해 해당 실행중인 컨텍스트 설정을 참조하십시오.
소스 코드
import java.io.bufferedReader; import java.io.file; import java.io.filereader; import java.io.ioexception; import java.nio.file.files; import java.nio.file.path; import java.nio.file.paths; import java.nio.file.standardcopyoption; java.util.regex.matcher; import java.util.regex.pattern; import javax.tools.javacompiler; import javax.tools.toolprovider;/*** dynamicreactor 동적 컴파일 모듈은 소스 파일을 컴파일하는 데 책임이 있으며 해당 패키지를 복사하고 (jdk 1.7), @ @ @a @a @awather. */public class dynamicReactor {javacompiler 컴파일러; 패턴 패키지 패터 른; 정적 최종 문자열 regex = "(? <= package // s).*(? =;); public dynamicReactor () {compiler = thoolprovider.getSystemjavacompiler (); packagepattern = paternamic (regex);}/*}; @param srcpath 소스 파일 path * @return class * <br> 해당 클래스의 클래스 인스턴스를 반환하는 경우 * <br> 실패는 null */public class <?> dynamicCompile (string srcpath) {class <?> result = null; {System.out.println ( "DynamicRector :로드 Packagename Error!"); return null;} // 지정된 소스 파일 int res = compiler.run (null, null, null, srcpath)을 컴파일하기 위해 컴파일러를 호출합니다. if (res! = 0) {System.out.println ( "return oror!"); 패키지 이름에 해당하는 경로가 존재하지 않으면 생성하고 지정된 클래스 파일이 존재하는 경우 덮어 쓰십시오. String PackagedSt = changePackettodic (packName); file dstdir = new File (packagedst); if (! dstdir.exists ()) {dstdir.mkdir ();} pathfrom = java. + ".class"); Path Pathto = Paths.get (PackagedSt, Pathfrom.getFilename (). toString ()); try {files.move (pathfrom, pathto, StandardCopyoption.replace_Existing);} catch (ioException e) {System.out.println ( "DynamicRector :"); {result = class.forname (packname+"."+pathfrom.getfilename (). toString (). split ( "//. class") [0]);} catch (classNotFoundException e) {System.out.println ( "DynamicRector : Final에서 찾을 수 없음!") // retogt a the Methodts a the Methodts a the Methodts a the Methodts a the Methodts a the Methodts a the Methodts는이 방법을 변환합니다. changepackettodic (String packagename) {string [] dirs = packagename.split ( "//"); String res = ".//bin" ;//bin" ;//bin" ;//bin" {res+="// "+dirs [i];} return res; {String result = null; bufferedReader br; try {br = new bufferedReader (new filereader (srcpath)); String data = br.readline (); while (data! = null) {if (data.indexof ( "package")! = -1) {matcher m = packagepattern.matcher (data); m.group ();} break;} data = br.readline ();} br.close ();} catch (ioexception e) {System.out.println ( "dynamicRector : 열린 파일의 오류"+srcPath);} return result;}}요약
위는 Java 프로그래밍의 동적 편집 및로드에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!