على ذبابة في الذاكرة جافا تجميع التعليمات البرمجية جافا 5 و Java 6

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

سؤال

كيف يمكنني ترجمة التعليمات البرمجية جافا من السلسلة التعسفي (في الذاكرة) في جافا 5 و جافا 6 تحميل و تشغيل طريقة محددة على ذلك (محددة مسبقا)?

قبل لهب هذا, نظرت على القائمة تطبيقات:

  • أكثر من الاعتماد على جافا 6 مترجم API.
  • تلك التي لا تعتمد على الحيل.
  • نعم ، لقد تحققت من المشاع-jci.أما أنا كثيفة جدا لفهم كيف يعمل أو لا.
  • أنا لا يمكن أن تجد كيفية تغذية مترجم الحالي مسار الفئة (وهي ضخمة جدا).
  • على تنفيذ يعمل (في جافا 6), أنا لا يمكن أن تجد كيفية بشكل صحيح تحميل الطبقات الداخلية (أو الداخلية مجهول الطبقات).
  • كنت تماما مثل ذلك إذا كان الأمر برمته كان في الذاكرة ، الشيء يعمل في بيئات متعددة.

أنا متأكد من أن هذا قد تم حلها من قبل, ولكن أنا لا يمكن العثور على أي شيء يبدو حتى نصف إنتاج الجودة على جوجل (باستثناء jci ، والتي كما قلت من قبل, لم تمكن من الاستخدام).

تحرير:

  • نظرت في أكثر من JavaAssist - أحتاج إلى الطبقات الداخلية, جافا 5.0 مستوى اللغة الدعم وتجميع مع كامل classpath.أيضا أود أن إنشاء فصول جديدة على الطاير.أنا قد يكون مخطئا, ولكن لم أتمكن من العثور على كيفية القيام بذلك مع JavaAssit.
  • أنا على استعداد لاستخدام نظام الملفات على أساس حل (الدعوة javac) ولكن لا أعرف كيفية الإلهية classpath ، ولا كيفية لاحقا تحميل الملفات (التي ليست في classpath) مع خاص classloader التي يمكن إعادة تدويرها متعددة الدعاء.بينما أنا لا أعرف كيفية البحث أنه أفضل حل جاهز.

Edit2:الآن أنا مع مضمون BeanShell "تقييم".على ما يبدو انه يفعل كل شيء أنا بحاجة إلى (الحصول على سلسلة تقييم ذلك في سياق 'الحالي' classpath.فإنه لا يغيب عن بعض جافا 5 ميزات ، ولكن يمكن استخدام enums (لم تحدد) وجمعت عامة (مسح) الطبقات ، لذلك ينبغي أن يكون كافيا للحصول على ما أريد.

أنا لا أريد أن مارك الجواب كما قبلت حتى الآن منذ أتمنى أن أفضل حل للخروج.

Edit3:قبلت beanshell اقتراح - أنه يعمل حقا رائعة.

هل كانت مفيدة؟

المحلول

إذا كنت غير مرتبطة تماما إلى تجميع الحلول مثل Beanshell, رائع و غيرها من لغات البرمجة هي جزءا لا يتجزأ بسهولة (في الواقع, جافا وقد بنيت في دعم توصيل في لغة البرمجة حتى التعليمات البرمجية الخاصة بك حتى لا يعرف اللغة النصي هو مكتوب في)

Beanshell يجب تشغيل أي 100% كود جافا IIRC, وأعتقد رائع يمكن تشغيل معظم كود جافا-ربما كل شيء.

نصائح أخرى

JCI تبدو على ما يرام.هذا مقتطف الشفرة يجب أن تكون قاعدة الخاص بك:

JavaCompiler compiler = new JavaCompilerFactory().createCompiler("eclipse");

MemoryResourceReader mrr = new MemoryResourceReader();
mrr.add("resource name string", yourJavaSourceString.getBytes());

MemoryResourceStore mrs = new MemoryResourceStore();

CompilationResult result = compiler.compile(sources, mrr, mrs);

// don't need the result, unless you care for errors/warnings
// the class should have been compiled to your destination dir

أي سبب يجب أن لا تعمل ؟


تحرير: وأضاف MemoryResourceStore إرسال جمعت فئة الإخراج إلى الذاكرة ، مثل طلب.

أيضا, وضع javac إعدادات مثل classpath في هذه الحالة, يمكن أن يتم عن طريق setCustomArguments(String[] pCustomArguments) في JavacJavaCompilerSettings فئة.

قد ترغب في التحقق Janino كذلك.

من موقعه على الانترنت:

Janino هو المترجم أن يقرأ JavaTM التعبير كتلة الطبقة الجسم ، مصدر ملف أو مجموعة من الملفات المصدر ، ويولد JavaTM بايت كود التي يتم تحميلها و تنفيذها مباشرة.Janino ليس المقصود أن يكون أداة من أدوات التنمية ، ولكن جزءا لا يتجزأ مترجم على وقت تشغيل تجميع الأغراض ، مثلالتعبير المقيمين أو "صفحات الملقم" تحب محركات JSP.

http://www.janino.net/

Im حاليا استخدامه في مجموعة كبيرة جدا مهمة المشروع يعمل على ما يرام

Javassist قد تهمك

تشغيل داخل حاوية الويب مثل القط و توليد أولا صفحة JSP, ثم الاحتجاج بها.

هذا أيضا تسمح لك للتخلص من الدرجة القديمة تعريفات ببساطة عن طريق الكتابة فوق صفحة JSP بدلا من وجود classloader ببطء تشغيل كامل.

هو "في الذاكرة" شرط بسبب السرعة أو بسبب عدم تغيير رمز القاعدة ؟

محكمة العدل الأوروبية الكسوف مترجم جافا

الكسوف يوفر يستخدم برنامج التحويل البرمجي الذي لا javac

  • الكسوف مترجم يستخدم داخل IDE (الكسوف)
  • الكسوف مترجم يمكن أن تستخدم أيضا كما محض دفعة مترجم خارج من الكسوف

ترجمة الملف المصدر

$ java -jar ecj-3.5.2.jar HelloWorld.java

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