আমি দুটি .jar ফাইলের সাথে কীভাবে তুলনা করব? দুজনেই .class ফাইল সংকলন করেছে।
পদ্ধতি পরিবর্তন ইত্যাদির ক্ষেত্রে আমি পার্থক্য চাই
উত্তর:
জ্যাপিক , নমুনা ব্যবহার:
japi-compliance-checker OLD.jar NEW.jar
জন্য log4j নমুনা রিপোর্ট http://abi-laboratory.pro/java/tracker/timeline/log4j/
পিকেজিডিফ , নমুনার ব্যবহার:
pkgdiff OLD.jar NEW.jar
Args4j এর জন্য নমুনা প্রতিবেদনটি দেখুন ।
ক্লিয়ার , নমুনার ব্যবহার:
java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar
আপনি যদি ইন্টেলিজআইডিয়াতে দুটি ফাইল নির্বাচন করেন এবং টিপুন Ctrl + D
তবে এটি আপনাকে আলাদা দেখায়। আমি আলটিমেট ব্যবহার করি এবং জানি না এটি সম্প্রদায়ের সংস্করণে কাজ করবে কিনা ।
jar
কেবলমাত্র ফাইলটির নাম পরিবর্তন করে এবং ব্যবহারের পরিবর্তে আমি সামগ্রীগুলি আহরণ করতে ব্যবহার করতে পারি pkunzip
))
javap -c
এটিকে বাইটোকোডে রাখার জন্য কল সহ stepচ্ছিকভাবে পদক্ষেপ 3 প্রতিস্থাপন করুন (বিশেষত "পদ্ধতি পরিবর্তন" দ্বারা যদি ওপি মানে কোনও পদ্ধতির স্বাক্ষরে পরিবর্তন হয়)।
diff
ইনক javap
বা jad
আউটপুট আউট আউট নিক্ষেপ করবে ।
আমি জিপডিফ লাইব ব্যবহার করি (জাভা এবং পিঁপড়া এপিআই উভয়ই থাকে)।
এক্সভিএফ প্যারামিটারের সাহায্যে জার কমান্ডটি ব্যবহার করে প্রতিটি জারটিকে তার নিজস্ব ডিরেক্টরিতে বের করুন। অর্থাত্ jar xvf myjar.jar
প্রতিটি জারের জন্য।
তারপরে, diff
দুটি ডিরেক্টরিকে তুলনা করতে UNIX কমান্ডটি ব্যবহার করুন । এটি ডিরেক্টরিগুলির মধ্যে পার্থক্য প্রদর্শন করবে। আপনি diff -r dir1 dir2
দুটি পুনরাবৃত্তি ব্যবহার করতে পারেন এবং প্রতিটি ডিরেক্টরিতে (.xML, .poperties, ইত্যাদি) টেক্সট ফাইলগুলির মধ্যে পার্থক্য দেখাতে পারেন ।
এটি বাইনারি ক্লাসের ফাইলগুলি পৃথক করে কিনা তাও প্রদর্শিত হবে। ক্লাসের ফাইলগুলি তুলনা করতে আপনাকে অন্যদের দ্বারা উল্লিখিত হিসাবে সেগুলি ছড়িয়ে দিতে হবে।
Sje397 দ্বারা বর্ণিত প্রক্রিয়াটি করতে এখানে আমার স্ক্রিপ্ট এখানে রয়েছে:
#!/bin/sh
# Needed if running on Windows
FIND="/usr/bin/find"
DIFF="diff -r"
# Extract the jar (war or ear)
JAR_FILE1=$1
JAR_FILE2=$2
JAR_DIR=${PWD} # to assign to a variable
TEMP_DIR=$(mktemp -d)
echo "Extracting jars in $TEMP_DIR"
EXT_DIR1="${TEMP_DIR}/${JAR_FILE1%.*}"
EXT_DIR2="${TEMP_DIR}/${JAR_FILE2%.*}"
mkdir ${EXT_DIR1}
cd ${EXT_DIR1}
jar xf ${JAR_DIR}/${JAR_FILE1}
jad -d . -o -t2 -safe -space -b -ff -s java -r **/*.class
cd ..
mkdir ${EXT_DIR2}
cd ${EXT_DIR2}
jar xf ${JAR_DIR}/${JAR_FILE2}
jad -d . -o -t2 -safe -space -b -ff -s java -r **/*.class
cd ..
# remove class files so the diff is clean
${FIND} ${TEMP_DIR} -name '*.class' | xargs rm
# diff recursively
${DIFF} ${EXT_DIR1} ${EXT_DIR2}
উইন্ডোজের জন্য জিআইটি ব্যবহার করে আমি এটি উইন্ডোতে চালাতে পারি। শুধু একটি কমান্ড প্রম্পট খুলুন। বাশ চালান এবং তারপরে সেখান থেকে স্ক্রিপ্টটি সম্পাদন করুন।
diff -r ${EXT_DIR1} ${EXT_DIR2}
বা ${DIFF} ${EXT_DIR1} ${EXT_DIR2}
(যদি আপনার ঘোষিত ভেরিয়েবলটি পুনরায় ব্যবহার করেন)। যারা সাইগউইনে রয়েছেন তাদের জন্য, স্ক্রিপ্টটি আমার পক্ষে দুটি পরিবর্তিত জিনিস বাদে প্রায় কাজ করেছিল: ১) জাদের পরিবর্তে আমাকে বিল্ট-ইন জাভ্যাপ ব্যবহার করতে হয়েছিল, কারণ আমি জ্যাড ডাউনলোড করতে পারছি না (এন্টারপ্রাইজ ফায়ারওয়াল ... ); 2) যেমন jar xf
does't পাথ বুঝতে মত /cygwin/c/rest/of/path
যার দ্বারা ফিরিয়ে দেওয়া হয় pwd
cygwin মধ্যে, আমি এটা রূপান্তর ছিল c:/rest/of/path
: JAR_DIR=${PWD}
, JAR_DIR=${JAR_DIR#*/cygdrive/c}
,JAR_DIR="c:$JAR_DIR"
jad
? PATH তে সেই বাইনারি উপলব্ধ নেই
foo/bar/toto.jar
), আপনাকে -p
যুক্তিটি mkdir কমান্ডে যুক্ত করতে হবে
লিনাক্স / সাইগউইনটিতে আমি মাঝে মাঝে ব্যবহার করি এমন একটি সহজ স্ক্রিপ্ট হ'ল:
#Extract the jar (war or ear)
cd dir1
jar xvf jar-file1
for i in `ls *.class`
do
javap $i > ${i}.txt #list the functions/variables etc
done
cd dir2
jar xvf jar-file2
for i in `ls *.class`
do
javap $i > ${i}.txt #list the functions/variables etc
done
diff -r dir1 dir2 #diff recursively
ব্যবহারের জাভা Decompiler সোর্স কোড ফাইলের মধ্যে বয়াম ফাইল চালু করুন, এবং তারপর ব্যবহার করতে WinMerge তুলনা সঞ্চালন।
এটি করা ঠিক আছে কিনা তা দেখার জন্য আপনার উত্স কোডের কপিরাইট ধারকের সাথে পরামর্শ করা উচিত।
ব্যবহারের জাভা decompiler এবং সব .class ফাইল ডিকম্পাইল এবং প্রকল্প গঠন হিসাবে সব ফাইলগুলি সংরক্ষণ।
তারপরে মেল্ড ডিফ ভিউয়ার ব্যবহার করুন এবং ফোল্ডার হিসাবে তুলনা করুন ..
এখানে একটি অপ্রত্যাশিত নিখরচায় সরঞ্জাম: http://www.extradata.com/products/jarc/
দয়া করে http://www.osjava.org/jardiff/ ব্যবহার করে দেখুন - সরঞ্জামটি পুরানো এবং নির্ভরতার তালিকাটি বড়। দস্তাবেজগুলি থেকে দেখে মনে হচ্ছে এটি চেষ্টা করার মতো।