গ্রেজ ২.০.১ / ১.৩ / ১.৪ 'গ্রিলস ২.০.০ রানটাইম ব্যতীত প্রক্সি তৈরি হয়। 1.2.0 ঠিক আছে


103

আমি ব্যাপ্ত কাজ করছি Grails Clojure প্লাগইন মধ্যে Grails 2.0.0 (এবং 2.1.0-স্ন্যাপশট) এবং আমি এটি আপডেট করতে চেয়েছিলেন Clojure 1.3.0 যোগ clojure.tools.logging

Clojure একটি এর সংকলন করার সময় একটি ব্যতিক্রম ছোঁড়ার প্রক্সি একটি এর ByteArrayOutputStreamমধ্যে clojure.tools.loggingএর লগ-স্ট্রীম ফাংশন:

ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn

( https://gist.github.com/a6ae681c37091a3d2379 )

আমি গিয়েছিলাম এবং সরানো clojure.tools.loggingএবং একটি ডাউন ছিনতাই লিখেছিলেন প্রক্সি এর Object:

(proxy [java.lang.Object] [] (toString [] "proxy's toString"))

এবং এটি একই ClassCastExceptionএবং বার্তা ছুড়ে ফেলেছে ।

আমি প্রিন্ট করতে চেষ্টা macroexpand -1 এর প্রক্সি এবং একই জিনিস পেয়েছি।

আমি Clojure ১.২.০ এ ফিরে এসেছি এবং প্রক্সি আবার কাজ করেছে।

আমি ১.৪.০ এর অনেকগুলি অবতারের চেষ্টা করেছি এবং তারা ১.৩.০ এর মতো আচরণ দেখায়। 1.2.1 এছাড়াও কিছু ব্যতিক্রম ছোঁড়ে কিন্তু আমি 1.3.0 হিট করার চেষ্টা করছি তাই আমি এর সাথে খুব বেশি সময় ব্যয় করিনি।

'জনক-পদ্ধতি ফাংশন পয়েন্ট স্ট্যাক ট্রেস এক সংজ্ঞায়িত যাক ফরম generate-proxyমধ্যে core_proxy.clj

আমি printlnকী ঘটছে তা ধরতে পারি কিনা তা দেখতে আমি সেখানে চারপাশে একটি ছোট্ট ছদ্মবেশ যুক্ত করেছি। সম্ভবত এই পরবর্তী বিবৃতিটি আমার পক্ষ থেকে পাঠকের একটি বিশাল ভুল বোঝাবুঝির সাথে বিশ্বাসঘাতকতা করবে তবে কেবল সেইগুলি printlnসংকলন সময়ের আচরণটি এমনভাবে পরিবর্তন করেছে যা আমি প্রত্যাশা করি না। ব্যতিক্রম অবস্থান এবং ব্যতিক্রমের ধরণটি পুরোপুরি পরিবর্তিত হয়েছে, যদিও ক্লোজুরের সমস্ত পরীক্ষা mvn packageপাস হতে থাকে।

উদাহরণস্বরূপ, printlnজেন-পদ্ধতিতে কেবলমাত্র একটি একক যুক্ত করা বাইটকোড তৈরি করা শুরু করার আগে ক্লোজারকে ফেলে দেয়

ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class

( https://gist.github.com/5a7a40929a6c4a104bd5 )

আমি কোথায় রেখেছি তার উপর নির্ভর করে আমি অন্যান্য বিভিন্ন ত্রুটি দেখেছি printlnতবে এটি সর্বাধিক প্রচলিত।

স্পষ্টতই গ্রিলস এবং ক্লোজারের কিছু দিক সঠিকভাবে জাল হচ্ছে না তবে আমি সংযোগটি দেখছি না। প্রথমে আমি এএসএমের অসম্পূর্ণতা নিয়ে সন্দেহ করি কিন্তু ক্লোজিউরের যেহেতু নিজস্ব এএসএম নেমস্পেস রয়েছে তাই আমি বিষয়টি দেখতে পাচ্ছি না। কিন্তু হয়তো আমি ভুল, আমি এ অনিমেষনেত্রে করে থাকেন আছি clojure.lang.Compiler, প্রক্সি এবং উৎপন্ন-প্রক্সি দিনের জন্য এখন কাজ করার জন্য এই পেতে চেষ্টা এবং আমি প্রায় কাছাকাছি এগিয়ে উপার্জন অগ্রগতি কারণ আমি বাষ্প ফুরিয়ে থাকেন বন্ধ করেছেন :(

লিঙ্কের অভাবে আমি ক্ষমা চাইছি। আপনি নীচে থেকে অনুলিপি এবং পেস্ট করতে পারেন:

গ্রেলে ক্লোজার - github.com/grails-plugins/grails-clojure

ক্লোজার সরঞ্জাম লগিং - github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj লাইন 133 'প্রক্সি


4
আমি আরও কিছু টেস্টিং করেছি এবং আমি সব কিছুতেই নিশ্চিত হয়েছি যে এটি গ্রেইস ২.০-তে এমন কিছু যা ক্লোজার ১.৩ এর উপর নির্ভর করে w আমি গ্রেইলের ১.৩..7, গ্রোভি ১.৮.৪ (গ্রিলস ২.০ ব্যবহার করে যা) এবং গ্রোভি ১.৮.৫ (সর্বশেষ) এবং সেগুলি সমস্ত কাজ করে আমি সবচেয়ে সহজ কোড নমুনা পরীক্ষা করেছি।
জন কোর্টল্যান্ড

3
এটি কি ক্লাসলডার ইস্যু হতে পারে?
জেরেমি

উত্তর:


4

আমি কোনও সমস্যা নামক পাওয়া CLJ-944উপর clojure.org । তোমার জন্য একটি ফিক্স জানতে পারেন ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Classবিষয়টি

সমস্যা হল:

যে সংকলকটি Clojure.lang.PersistanceHashMap এ একটি ভুল কাস্ট ইনজেক্ট করেছে। এই ক্ষেত্রে এটি সম্ভবত একটি Clojure.lang.Associative, কন্টেন্টস কী পদ্ধতিতে সর্বাধিক সাধারণ ইন্টারফেসে ফেলে দেওয়া উচিত।

প্যাচ 1 - 0001-সিএলজে -944.patch জন্য-ফিক্স

প্যাচ 2 - 0002-সিএলজে -944.patch-এর জন্য স্থির করুন

আমি আসা করি এটা সাহায্য করবে.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.