Краткое описание
В этом классе используется javacompiler, включенный в javax.tools.toolprovider для компиляции, использует файл io и файлы Nio для соответствующего создания, чтения и копирования пути, а также использует регулярные выражения для преобразования имен и каталогов пакетов. Я только что сделал устойчивую интеграцию этих вещей, и у нее нет технического контента, так что это для удобства.
Модуль API
class DynamicReactor://empty parameter construct public Class<?> dynamicCompile(String srcPath);//Input a specified source file path, if compilation and copying are successful, return the corresponding Class class instance of the class private String changePacketToDic(String packageName);//Convert a legal package name to the path in the corresponding JavaClassPath (I am using eclipse, so I need to add the bin Справочник соответственно.
исходный код
Импорт java.io.bufferedReader; импорт java.io.file; import java.io.filereader; импорт java.io.ioexception; import java.nio.file.files; импорт java.nio.file.path; импорт java.nio.file.paths; import.momporm.file.shapyopiopion java.util.regex.matcher; import java.util.regex.pattern; import javax.tools.javacompiler; import javax.tools.toolprovider;/*** DynamicReactor. Модуль динамического компиляции отвечает за исходные файлы. */Общедоступный класс DynamicReactor {JavAcompiler Compiler; Pattern PackagePattern; статический конечный regex = "(? <= пакет // s).*(? @param srcpath pail Pail * @return Class * <br> Если успешно возвращает экземпляр класса соответствующего класса * <br> Если отказ возвращает Null * */public class <?> DynamicCompile (String srcpath) {class <?> result = null; // get string packageName = getPackage (srcpath); {System.out.println ("DynamicRector: Load PackageName Error!"); Return Null;} // Call Compiler для компиляции указанного исходного файла int res = compiler.run (null, null, null, srcpath); if (res! Путь, соответствующий имени пакета, создайте его, если путь не существует, и перезаписать, если указанный файл класса существует string packagedst = changepackettodic (packname); файл dstdir = new File (packagedst); if (! dstdir.exists ()) {dstdir.mkdir ();} pathfrom = pathfrom =) {dstdir.mkdir (); Paths.get (srcpath.split ("//. Java") [0] + ".class"); pathto pathto = paths.get (packagedst, pathfrom.getfilename (). Tostring ()); try {files.move (pathfrom, pathto, standarcopyoption.replace_existing); {System.out.println ("DynamicRector: Fove File Fail!"); E.printstackTrace ();} try {result = class.forname (packname+"."+Pathfrom.getfilename (). ToString (). {System.out.println ("DynamicRector: Class, не найденный в Final!");} Return Result;} // Этот метод обращается с именем легального пакета в соответствующий путь частной строки changepackettodic (String PackageName) {String [] dirs = packageName.split ("//); string res =". {res += "//" +dirs [i];} return res;} // Этот метод получает имя пакета из данного файла источника пути private string getPackage (string srcpath) {string result = null; bufferedReader br; try {br = new BufferedReader (new FileReader (srcPath)); String Data = br.Readline (); {if (data.Indexof ("package")! = -1) {matcher m = packagepattern.matcher (data); if (m.find ()) {result = m.group ();} break;} data = br.readline ();} br.close ();} catch (ioexception e) {system.out.println ("dynamic: is dynamic: is dynamic: rase in forem. "+srcpath);} return result;}}Суммировать
Выше приведено все содержание этой статьи о динамическом компиляции и загрузке программирования Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!