দুটি .jar ফাইলের সাথে তুলনা করা


94

আমি দুটি .jar ফাইলের সাথে কীভাবে তুলনা করব? দুজনেই .class ফাইল সংকলন করেছে।

পদ্ধতি পরিবর্তন ইত্যাদির ক্ষেত্রে আমি পার্থক্য চাই

উত্তর:


96

আন্দ্রে, এই সরঞ্জামগুলির মধ্যে পার্থক্য কী? তারা কি একই কোর থেকে স্টেম?
নিকোলে কুজনেটসভ

4
@ নিকোলেকুজনেটসভ, না, এই সরঞ্জামগুলির আলাদা কোর রয়েছে। পিকেজিডিফ - শ্রেণীর ঘোষণা, জাপি-কমপ্লায়েন্স-চেকার এবং ক্লিরার সাথে ভিজ্যুয়াল তুলনা - পরিবর্তনের বিশ্লেষণ (প্রথমটি পার্লে লেখা হয়, দ্বিতীয়টি জাভাতে)।
লিনাক্সবিল্ড

আপনি কি টিমসিটির সাথে কিছু সংহত করার চেষ্টা করেছেন? দেখে মনে হচ্ছে ক্লিয়ারটিতে একটি মাভেন প্লাগইন রয়েছে এবং সেখানে জেপিআই-চেকার নামে একটি সরঞ্জামও রয়েছে।
নিকলে কজনেটসভ

4
দয়া করে নোট করুন যে জাপি-কমপ্লায়েন্স-পরীক্ষক এবং পেকডিডিফ উভয়ের সাথে সমস্ত কিছু তুলনা করে না। উদাহরণস্বরূপ, সমস্ত পদ্ধতি বাস্তবায়ন উপেক্ষা করা হয়। প্রতিবেদন হিসাবে কেবল পদ্ধতি স্বাক্ষর, পদ্ধতি অপসারণ এবং এপিআই সামঞ্জস্যগুলি তৈরি করা হয়। আপনি যদি বাইনারিগুলির তুলনা করতে যান তবে আপনি ডিফ বা সিএমপি বা ইন্টেলিজি প্লাগইন বা এমনকি তুলনার বাইরেও ব্যবহার করতে পারেন!
শ্রীরাম

25

আপনি যদি ইন্টেলিজআইডিয়াতে দুটি ফাইল নির্বাচন করেন এবং টিপুন Ctrl + Dতবে এটি আপনাকে আলাদা দেখায়। আমি আলটিমেট ব্যবহার করি এবং জানি না এটি সম্প্রদায়ের সংস্করণে কাজ করবে কিনা ।


4
@ ক্রিশ্চিয়ান নিলসন, ম্যাক 10.14
মোজভেভে

আমি মাভেনের মোড়কে বাছাই করার ভুল করেছিলাম। বাহ্যিক গ্রন্থাগারগুলির অধীনে আপনার মোড়কে প্রসারিত করতে হবে এবং তারপরে জার-ফাইলটি নির্বাচন করতে হবে। ধন্যবাদ @ এক্সুশেং
খ্রিস্টান নীলসন

সুপার সহজ সমাধান।
xendermonkey

আশ্চর্যজনক যে আমি সন্ধান
করছিলাম

18
  1. .Jip থেকে .zip নামকরণ করুন
  2. নির্যাস
  3. জাদের সাথে ক্লাস ফাইলগুলি ডিসকোপাইল করুন
  4. রিকার্সিভ ডিফ

4
এটি নিষ্ঠুর শক্তি, কিন্তু আমি ঠিক এটিই করতাম। ( jarকেবলমাত্র ফাইলটির নাম পরিবর্তন করে এবং ব্যবহারের পরিবর্তে আমি সামগ্রীগুলি আহরণ করতে ব্যবহার করতে পারি pkunzip))
ডেভিড আর ট্রিবিলে

4
javap -cএটিকে বাইটোকোডে রাখার জন্য কল সহ stepচ্ছিকভাবে পদক্ষেপ 3 প্রতিস্থাপন করুন (বিশেষত "পদ্ধতি পরিবর্তন" দ্বারা যদি ওপি মানে কোনও পদ্ধতির স্বাক্ষরে পরিবর্তন হয়)।
মার্ক পিটারস

উত্স ফাইলটি উপরে বা নীচে সরানো পদ্ধতি পদ্ধতির সাথে আপনি কীভাবে আচরণ করবেন? আমি মনে করি যে এই diffইনক javapবা jadআউটপুট আউট আউট নিক্ষেপ করবে ।
মার্কাস জুনিয়াস ব্রুটাস


5

এক্সভিএফ প্যারামিটারের সাহায্যে জার কমান্ডটি ব্যবহার করে প্রতিটি জারটিকে তার নিজস্ব ডিরেক্টরিতে বের করুন। অর্থাত্ jar xvf myjar.jarপ্রতিটি জারের জন্য।

তারপরে, diffদুটি ডিরেক্টরিকে তুলনা করতে UNIX কমান্ডটি ব্যবহার করুন । এটি ডিরেক্টরিগুলির মধ্যে পার্থক্য প্রদর্শন করবে। আপনি diff -r dir1 dir2দুটি পুনরাবৃত্তি ব্যবহার করতে পারেন এবং প্রতিটি ডিরেক্টরিতে (.xML, .poperties, ইত্যাদি) টেক্সট ফাইলগুলির মধ্যে পার্থক্য দেখাতে পারেন ।

এটি বাইনারি ক্লাসের ফাইলগুলি পৃথক করে কিনা তাও প্রদর্শিত হবে। ক্লাসের ফাইলগুলি তুলনা করতে আপনাকে অন্যদের দ্বারা উল্লিখিত হিসাবে সেগুলি ছড়িয়ে দিতে হবে।


3

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}

উইন্ডোজের জন্য জিআইটি ব্যবহার করে আমি এটি উইন্ডোতে চালাতে পারি। শুধু একটি কমান্ড প্রম্পট খুলুন। বাশ চালান এবং তারপরে সেখান থেকে স্ক্রিপ্টটি সম্পাদন করুন।


4
দেখে মনে হচ্ছে আপনি শেষ লাইনটি মিস করেছেন: diff -r ${EXT_DIR1} ${EXT_DIR2}বা ${DIFF} ${EXT_DIR1} ${EXT_DIR2}(যদি আপনার ঘোষিত ভেরিয়েবলটি পুনরায় ব্যবহার করেন)। যারা সাইগউইনে রয়েছেন তাদের জন্য, স্ক্রিপ্টটি আমার পক্ষে দুটি পরিবর্তিত জিনিস বাদে প্রায় কাজ করেছিল: ১) জাদের পরিবর্তে আমাকে বিল্ট-ইন জাভ্যাপ ব্যবহার করতে হয়েছিল, কারণ আমি জ্যাড ডাউনলোড করতে পারছি না (এন্টারপ্রাইজ ফায়ারওয়াল ... ); 2) যেমন jar xfdoes't পাথ বুঝতে মত /cygwin/c/rest/of/pathযার দ্বারা ফিরিয়ে দেওয়া হয় pwdcygwin মধ্যে, আমি এটা রূপান্তর ছিল c:/rest/of/path: JAR_DIR=${PWD}, JAR_DIR=${JAR_DIR#*/cygdrive/c},JAR_DIR="c:$JAR_DIR"
PetroCliff

আপনি সঠিক @dpg শেষ লাইনটি ছিল $ {ডিআইএফএফ} $ {EXT_DIR1} $ {EXT_DIR2 anga
স্কাঙ্গা

কী jad? PATH তে সেই বাইনারি উপলব্ধ নেই
ফিলিপ

জাদ একটি জাভা ডিকম্পিলার। আমি মনে করি এটি আর রক্ষণাবেক্ষণ করা হয় না তবে আমি এটি জাভাদেকম্পিলার্স
আইজেডে

আপনার আর্গুমেন্টগুলি (জার ফাইলগুলি) উপ-ডিরেক্টরিতে রয়েছে (যেমন foo/bar/toto.jar), আপনাকে -pযুক্তিটি mkdir কমান্ডে যুক্ত করতে হবে
দুডুচে

2

লিনাক্স / সাইগউইনটিতে আমি মাঝে মাঝে ব্যবহার করি এমন একটি সহজ স্ক্রিপ্ট হ'ল:

#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

1

ব্যবহারের জাভা Decompiler সোর্স কোড ফাইলের মধ্যে বয়াম ফাইল চালু করুন, এবং তারপর ব্যবহার করতে WinMerge তুলনা সঞ্চালন।

এটি করা ঠিক আছে কিনা তা দেখার জন্য আপনার উত্স কোডের কপিরাইট ধারকের সাথে পরামর্শ করা উচিত।


1

ব্যবহারের জাভা decompiler এবং সব .class ফাইল ডিকম্পাইল এবং প্রকল্প গঠন হিসাবে সব ফাইলগুলি সংরক্ষণ।

তারপরে মেল্ড ডিফ ভিউয়ার ব্যবহার করুন এবং ফোল্ডার হিসাবে তুলনা করুন ..


0

এখানে একটি অপ্রত্যাশিত নিখরচায় সরঞ্জাম: http://www.extradata.com/products/jarc/


ধন্যবাদ আমি এই চেষ্টা করেছিলাম। এটি এক্সএমএলে আউটপুট উত্পাদন করে এবং আরও প্রসেসিং এটি পাঠযোগ্য করে তোলার জন্য প্রয়োজন, যদি আপনার জজার অনেক ক্লাস থাকে
কুণাল

4
আমার কাছে এটি একটি নিখোঁজ সরঞ্জামগুলির সম্পর্কে অভিযোগ করেছে jar আমি জেডিকে ব্যবহার করি, তাই সমস্যা নেই। আমি মনে করি এটি জাভা 7 সমর্থন করে না।
রোল স্পিলকার 16

@ লিঙ্কটি নষ্ট হয়ে গেলে, এই উত্তরটি সরানো যেতে পারে।
ডেভিড ডসোট

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