كيفية ضبط ClassPath عندما أستخدم javax.tools.javacompiler تجميع المصدر؟

StackOverflow https://stackoverflow.com/questions/1563909

سؤال

أنا أستخدم الفصل 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") أو برنامج التحويل البرمجي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top