كيفية ضبط ClassPath عندما أستخدم javax.tools.javacompiler تجميع المصدر؟
-
21-09-2019 - |
سؤال
أنا أستخدم الفصل javax.tools.JavaCompiler
(JDK6) لتجميع ملف مصدر ، لكن الملف المصدر يعتمد على بعض ملفات JAR. كيفية ضبط classpath من javax.tools.JavaCompiler
?
المحلول
ال javax.tools.javacompiler#getTask () الطريقة تأخذ options
المعلمة التي تسمح بتعيين خيارات البرمجيات. ما يلي رسالة يصف طريقة سهلة لتعيينها من أجل الوصول إلى ClassPath برنامج الاتصال:
تحتاج إلى تكوين مدير ملف Java القياسي لمعرفة ملفات (ملفات) JAR - يمكنك استخدام وسيطة خيارات البرمجة المترجم للقيام بذلك.
بشكل افتراضي ، يبدو أن كائن برنامج التحويل البرمجي Java يعرف فقط عن المواقع الافتراضية لـ BootClassPath و ExtDirs و Adperorddirs من حيث ClassPath.
تحتاج إلى إضافة ClassPath الحالي لبرنامج الاتصال إلى مثيل Java Compiler الذي يتم تمريره على مدير الملفات القياسي ، والذي سيجد فئات في ملفات JAR.
إليك كيف أفعل ذلك غلاف المترجم الذي كتبته
List<String> optionList = new ArrayList<String>(); // set compiler's classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);
كل ما ستحتاجه بعد ذلك هو الحصول على مجموعة ClassPath المناسبة عند تشغيل برنامج الاتصال.
نصائح أخرى
حدثت نفس المشكلة لي مؤخرًا ، وأخيراً وجدت حلتين. يمكنك تعيين مسار الفصل إما عن طريق الاستدعاء standardjavafileManager.setLocation (standardlocation.class_path ، "your_class_path") أو برنامج التحويل البرمجي.