คำอธิบายสั้น ๆ
คลาสนี้ใช้ javacompiler ที่มาพร้อมกับ javax.tools.toolprovider สำหรับการรวบรวมใช้ไฟล์ IO และไฟล์ NIO สำหรับการสร้างเส้นทางที่สอดคล้องกันการอ่านและการคัดลอกและใช้นิพจน์ทั่วไปเพื่อแปลงชื่อแพ็คเกจและไดเรกทอรี ฉันเพิ่งทำการรวมข้อผิดพลาดของสิ่งเหล่านี้และไม่มีเนื้อหาทางเทคนิคดังนั้นจึงเป็นเพื่อความสะดวก
โมดูล API
คลาส DynamicReactor: // พารามิเตอร์ที่ว่างเปล่าสร้างคลาสสาธารณะ <?> DynamicCompile (String SRCPath); // อินพุตเส้นทางไฟล์ต้นฉบับที่ระบุหากการรวบรวมและการคัดลอกประสบความสำเร็จ ตามลอบ
รหัสต้นฉบับ
นำเข้า java.io.bufferedreader; นำเข้า java.io.file; นำเข้า java.io.filereader; นำเข้า java.io.ioexception; นำเข้า java.nio.file.files; นำเข้า java.nio.file.path; นำเข้า Java.nio.file.paths java.util.regex.matcher; นำเข้า java.util.regex.pattern; นำเข้า javax.tools.javacompiler; นำเข้า Javax.tools.toolprovider;/*** DynamicReactor โมดูลการรวบรวมแบบไดนามิก */คลาสสาธารณะ DynamicReactor {Javacompiler Compiler; Pattern PackagePattern; สตริงสุดท้ายคงที่ regex = "(? <= package // s)*(? =;); DynamicReactor สาธารณะ () {Compiler = toolprovider.getSystemJaVacompilerer ไฟล์ * @param SrcPath แหล่งที่มาของไฟล์ * @return class * <br> หากประสบความสำเร็จในการส่งคืนอินสแตนซ์คลาสของคลาสที่สอดคล้องกัน * <br> หากความล้มเหลวส่งคืน null * */คลาสสาธารณะ <?> dynamiccompile (สตริง srcpath) {คลาส < {system.out.println ("DynamicRector: โหลดข้อผิดพลาด packagename!"); return null;} // call compiler เพื่อรวบรวมไฟล์ต้นฉบับที่ระบุ int res = compiler.run (null, null, null, srcpath); if (res! = 0) {system.out.out. สอดคล้องกับชื่อแพ็คเกจให้สร้างหากไม่มีพา ธ และเขียนทับหากไฟล์คลาสที่ระบุมีอยู่สตริง packagedst = changepackettodic (packname); ไฟล์ dstdir = ไฟล์ใหม่ (packagedst); if (! dstdir.exists ()) + ".class"); pathto = paths.get (packagedst, pathfrom.getfilename (). toString ()); ลอง {files.move (pathfrom, pathto, standardcopyoption.replace_existing)} catch (ioexception e) {system.out.out.out.out.out. {result = class.forName (packname+"."+pathfrom.getFilename (). toString (). แยก ("//. class") [0]);} catch (classnotfoundException e) {system.out.println ( ChangePacketTodic (String Packagename) {String [] dirs = packagename.split ("//."); String res = ".//bin"; สำหรับ (int i = 0; i <dirs.length; i ++) {res+=" // " {string result = null; bufferedreader br; ลอง {br = new bufferedReader (filereader ใหม่ (srcPath)); สตริงข้อมูล = br.readline (); ในขณะที่ (data! = null) {ถ้า (data.indexof ("package")! m.group ();} break;} data = br.readline ();} br.close ();} catch (ioexception e) {system.out.println ("DynamicRector: ข้อผิดพลาดในไฟล์เปิด"+srcpath);} ส่งคืนผลลัพธ์;}}}}}}}}สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการรวบรวมแบบไดนามิกและการโหลดการเขียนโปรแกรม Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!