JavaRush /جاوا بلاگ /Random-UR /جاوا میں مرتب کرنا

جاوا میں مرتب کرنا

گروپ میں شائع ہوا۔
IDE میں پروگرامنگ بہت اچھا ہے: کوڈ پر انحصار کا ہم آہنگی، آسان ڈیبگنگ، واضح جانچ، تاریک تھیم۔ لہذا، IDE کی بدولت، ترقی تیزی سے ترقی کر رہی ہے۔ لیکن وہ آرام کرتی ہے۔ ہر روز، خود کو IDE کی فعالیت میں غرق کرتے ہوئے، ڈویلپر ایک بٹن کے ساتھ کام کرنے یا دو کلکس کے ساتھ عمارت بنانے کا عادی ہو جاتا ہے۔ جاوا میں مرتب کرنا - 1پروگرامنگ میں نئے آنے والوں کے ساتھ صورتحال بہت خراب ہے جو کمانڈ لائن پر کام کو نظر انداز کرتے ہوئے شروع سے ہی IDE میں کام کرتے ہیں۔ مثال کے طور پر، Intellij IDEA میں، جاوا ایپلیکیشن کی تالیف کو نیچے والے پینل میں ایک لوڈنگ بار کے ذریعے ظاہر کیا جاتا ہے، اور تمام تالیف کے پیرامیٹرز، کلاس پاتھ پروسیسنگ اور جاوا کی زندگی کی دیگر خوشیاں پردے کے پیچھے رہتی ہیں۔ ہم IDE کے بغیر جاوا میں مرتب کرنے کے بارے میں بات کرنے کا مشورہ دیتے ہیں۔ اس مضمون میں مثالیں چلانے کے لیے، یقینی بنائیں کہ آپ کی مشین پر JDK 1.7 یا بعد کا ورژن انسٹال ہے۔

پروگرام کیسے مرتب کیا جائے؟

پروگرامنگ میں تالیف پروگرام کے بعد کے آغاز کے لیے سورس کوڈ کو بائی کوڈ میں کم کرنا ہے۔ سورس کوڈ سے پروگرام لانچ تک کے اعمال کی ترتیب اس طرح نظر آتی ہے:
  1. ClassName.java نامی فائل میں سورس کوڈ ہے۔
  2. اگر کوڈ میں کوئی خامی نہیں ہے، تو اسے بائیک کوڈ میں مرتب کیا جاتا ہے (فائل ClassName.class میں)؛
  3. پروگرام شروع ہوتا ہے۔
عام طور پر، ہر پروگرام ایک علیحدہ ڈائریکٹری میں موجود ہوتا ہے۔ ایک سادہ مثال کے طور پر، آئیے آؤٹ پٹ کو کنسول میں لے جائیں:
class Test {
   public static void main(String[] args) {
      System.out.println("Это говорит приложение из командной строки");
   }
}

javac کمانڈ کس کے لیے استعمال ہوتی ہے؟

ٹھیک ہے، پہلا نقطہ ہو گیا ہے. آئیے مزید سمجھنے کے لیے چلتے ہیں: مرتب کیسے کریں؟ :) javac کمانڈ اس میں ہماری مدد کرے گی، جس کی دلیل کو مطلوبہ فائل کی نشاندہی کرنی چاہیے:

javac Test.java
اگر کوڈ میں کوئی خامی نہیں ہے تو، Test.java فائل کے آگے Test.class فائل نظر آئے گی۔ یہ مرتب کردہ بائٹ کوڈ ہے۔ اب اسے شروع کرنے کی ضرورت ہے۔ یہاں ہم جاوا کمانڈ استعمال کرتے ہیں، جو بائی کوڈ کو چلاتا ہے: جاوا میں مرتب کرنا - 2اسکرین شاٹ سے پتہ چلتا ہے کہ ہمیں آؤٹ پٹ میں کچھ ہائروگلیفس ملتے ہیں: ظاہر ہے، یہ ٹوٹا ہوا انکوڈنگ ہے۔ عام طور پر یہ ونڈوز سسٹم پر ہوتا ہے۔ کنسول میں سیریلک حروف تہجی کو صحیح طریقے سے ظاہر کرنے کے لیے، درج ذیل کمانڈز ہیں:

REM change CHCP to UTF-8
CHCP 65001
CLS
وہ موجودہ شیل کوڈ کا صفحہ موجودہ ونڈو کی مدت کے لیے تبدیل کرتے ہیں۔ دوبارہ کوشش کرتے ہیں:

D:\Java>java Test
یہ درخواست کمانڈ لائن سے کہتی ہے۔ یہ جاننا کہ javac کمانڈ کس طرح کام کرتی ہے بہت مفید ہے، کیونکہ یہ کمانڈ کسی بھی پروجیکٹ کی تعمیر کے نظام کی بنیاد ہے۔

متعدد کلاسز کو مرتب کرنا اور چلانا

متعدد کلاسوں کے ساتھ کام کرنے کے لیے آپ کو ایک کلاس پاتھ کی ضرورت ہے۔ یہ ایک فائل سسٹم کی طرح ہے جس میں کلاسز موجود ہیں، اور پیکجز فولڈر کے طور پر کام کرتے ہیں۔ اس وقت، مرتب شدہ فائلوں سے سورس کوڈ فائلوں کو الگ کرنے کے بارے میں سوچنے کے قابل ہے۔ ایک اصول کے طور پر، ذرائع src ڈائرکٹری میں واقع ہیں، اور مرتب شدہ کلاسیں بن میں ہیں۔ مثال کے طور پر، ہمارے پاس ایک کلاس Boxاور ایک کلاس ہے BoxMachineجس میں ایک طریقہ ہے main۔ کلاس Box:
package src;

public class Box {
   private double size;

   public Box(double size) {
       this.size = size;
   }

   public String toString() {
       return "Box have size " + size;
   }
}
یہ src پیکیج میں ہے، اسے ٹھیک کرنے کی ضرورت ہے۔ کلاس BoxMachine:
package src;

public class BoxMachine {
   public static void main(String[] args) {
       for(int  i = 0; i < 5; i++) {
           System.out.println(new Box(Math.random()*10));
       }
   }
}
یہ کلاس src پیکیج میں بھی پائی جاتی ہے۔ طریقہ کار میں main، یہ Boxمختلف سائز کی پانچ کلاس اشیاء بناتا ہے اور کنسول میں ان کے بارے میں معلومات دکھاتا ہے۔ کلاسز کے اس گروپ کو مرتب کرنے کے لیے، آپ کو مین ڈائرکٹری (جس میں src اور bin فولڈرز ہوتے ہیں) سے javac کمانڈ کو دلائل کے ساتھ استعمال کرنا چاہیے:

javac -d bin ./src/*
-d- ایک جھنڈا جس کے بعد آپ کو اس مقام کی نشاندہی کرنی چاہیے جہاں مرتب شدہ کلاسز جائیں گی۔ یہ بہت آسان ہے، کیونکہ منتقلی، مثال کے طور پر، 1000 کلاسز ایک بہت محنت طلب عمل ہے۔ bin- فولڈر کا نام. ./src/*- سورس فائلوں کا مقام۔ *اشارہ کرتا ہے کہ تمام فائلوں کو مرتب کرنا ضروری ہے۔ اب مرتب شدہ کلاسز بن فولڈر میں ظاہر ہوتی ہیں۔ انہیں چلانے کے لیے اسی ڈائرکٹری سے جاوا کمانڈ استعمال کریں، دلائل کے ساتھ بھی:

java -classpath ./bin BoxMachine
-classpath- ایک جھنڈا جس کے بعد آپ کو مرتب شدہ کلاسوں کے مقام کی نشاندہی کرنی چاہیے۔ جاوا اس ڈائرکٹری میں مین کلاس اور تمام متعلقہ افراد کو تلاش کرے گا۔ ./bin- اس فولڈر کا نام جس میں مرتب شدہ کلاسز واقع ہیں۔ BoxMachine- مرکزی کلاس کا نام۔ جیسا کہ پہلی صورت میں، اس کی وضاحت نہیں کی جانی چاہیے .class، کیونکہ یہ ایک کلاس کا نام ہے، فائل کا نہیں۔ نتیجہ:

D:\Java>java -classpath ./bin src.BoxMachine
Box have size 4.085985295359718
Box have size 8.63682158248986
Box have size 6.027448124299726
Box have size 7.288317703877914
Box have size 1.106181659384694

JAR فائلیں بنانا

پروگرام کو پورٹ اور چلانے میں آسان بنانے کے لیے، آپ مرتب شدہ کلاسز کو جار فائل میں جمع کر سکتے ہیں - ایک کلاس آرکائیو۔ زپ یا rar آرکائیوز سے بنیادی فرق مینی فیسٹ فائل کی موجودگی ہے۔ یہ مینی فیسٹ اس مین کلاس کی وضاحت کرتا ہے جو جار فائل کے عمل میں آنے پر چلائی جائے گی، کلاس پاتھ، اور بہت سی اضافی معلومات۔ آئیے مین ڈائرکٹری میں ایک manifest.mf فائل بنائیں۔ اس کے مندرجات حسب ذیل ہوں گے۔

main-class: src.BoxMachine
class-path: bin/
main-classاس کلاس کی وضاحت کرتا ہے جس میں طریقہ ہے mainاور اسے اسٹارٹ اپ پر عمل میں لایا جائے گا۔ class-path- مرتب شدہ کلاسوں یا اضافی لائبریریوں کا راستہ۔ اب جار کمانڈ کا استعمال کرتے ہوئے IDE کے بغیر ایک حقیقی پروگرام بنانے کا وقت ہے:

jar -cmf manifest.mf box-machine.jar  -C bin .
-cmf- ایک جھنڈا جس کے بعد آپ کو مینی فیسٹ فائل کا راستہ بتانا چاہیے۔ manifest.mf- ظاہر کا راستہ۔ box-machine.jarآؤٹ پٹ جار فائل کا نام۔ - ایک جھنڈا جس کے بعد مرتب شدہ کلاسوں کا راستہ ظاہر ہوتا ہے۔ .- وہ راستہ جہاں جار فائل رکھی جائے گی۔ ہمارے معاملے میں، یہ مرکزی ڈائریکٹری ہے۔ اب آپ لانچ کر سکتے ہیں۔ جار فائلوں کو لانچ کرنا بھی java کمانڈ کا استعمال کرتے ہوئے کیا جاتا ہے، لیکن پھر آپ کو پرچم کی وضاحت کرنے کی ضرورت ہے -jar: اس سے ظاہر ہوتا ہے کہ جار فائل لانچ کی جا رہی ہے، اور دوسری دلیل فائل کا راستہ ہے jar، بشمول ایکسٹینشن :

java -jar box-machine.jar
نتیجہ:

Box have size 5.5495235762547965
Box have size 9.695870044165662
Box have size 2.3408385788129227
Box have size 7.2790741216674135
Box have size 2.3620854470160513

IDE کے بغیر جاوا میں مرتب کرنا: بلڈ سسٹمز کا جائزہ

کمانڈ لائن کے استعمال میں نسبتاً آسانی کے باوجود، اس کا استعمال کرتے ہوئے درمیانے اور بڑے منصوبے بنانا بہت مشکل ہے۔ اس میں کافی وقت لگتا ہے اور یہ مختلف درجات کی غلطیوں سے بھرا ہوا ہے۔ خوش قسمتی سے، وہاں اسمبلی کے نظام موجود ہیں جو کام کے عمل کو بہت آسان بناتے ہیں. کئی ٹیموں کے ساتھ، یہ نظام کسی بھی پیچیدگی کے منصوبے کو جمع کر سکتا ہے، اور اس طرح کے نظام کے وجود کے دوران پیدا ہونے والے پلگ انز کی کثرت تقریباً کسی بھی سر درد کو ختم کر سکتی ہے۔

جاوا کو کیسے مرتب کیا جائے؟

سب سے مشہور جاوا تعمیراتی نظام ہیں چیونٹی، ماون اور گریڈل۔ کوئی اچھا یا برا نہیں ہے: ان میں سے ہر ایک مخصوص مسائل کو حل کرنے کے لئے بنایا گیا ہے. آئیے ان میں سے ہر ایک کو مزید تفصیل سے دیکھیں۔

چیونٹی

چیونٹی ایک تعمیراتی ٹول ہے جو ایک اسکرپٹ کا استعمال کرتی ہے جسے xml فائل کا استعمال کرتے ہوئے بیان کیا گیا ہے۔ xml فائل کی ساخت:
<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
    <target name="NameСценария">
  //  Действия сценария
        <echo>Hello, World!</echo>
    </target>
  //  Второй сценарий
  //  И тд
</project>
آئیے درج ذیل مواد کے ساتھ مین ڈائرکٹری میں ایک build.xml فائل بنائیں:
<?xml version="1.0"?>
<project name="BoxMachine" default="test">
   <target name="test">
       <echo>First build in Ant!</echo>
   </target>
</project>
اسی ڈائرکٹری میں، ant کمانڈ کو کال کریں:

D:\Java>D:\Temp\ant\bin\ant
Buildfile: D:\Java\build.xml

test:
     [echo] First build in Ant!

BUILD SUCCESSFUL
Total time: 0 seconds
ٹیگ <target>مختلف کاموں کی وضاحت کرسکتا ہے جو آپ کو اسمبلی اور فائل سسٹم کو منظم کرنے کی اجازت دیتے ہیں۔ چیونٹی کے پاس 150 سے زیادہ کمانڈز دستیاب ہیں، جو دستاویزات میں درج ہیں۔ ذیل کی مثال میں ہم صرف 5 استعمال کرتے ہیں:
  • mkdir - ڈائریکٹریز بنانا
  • delete- فائلوں اور ڈائریکٹریوں کو حذف کرنا
  • javac- جاوا کوڈ کی تالیف
  • java- مرتب شدہ کوڈ چل رہا ہے۔
ایک سادہ کمپائل، بلڈ، یا کلین اپ اسکرپٹ ایسا لگتا ہے:
<?xml version="1.0"?>
<project name="BoxMachine" default="compile">
   <target name="compile">
       <mkdir dir="result/classes"/>
       <javac destdir="result/classes" includeantruntime="false">
           <src path="src"/>
       </javac>
   </target>
   <target name="run" depends="compile">
       <java classname="BoxMachine" classpath="result/classes"/>
   </target>
   <target name="clean">
       <delete dir="result"/>
   </target>
</project>
اسکرپٹ تین اعمال کی وضاحت کرتا ہے - compile, ,code>run اور clean. compileاس میں کلاسوں کے ساتھ نتیجہ کی ڈائرکٹری بناتا ہے، پھر کلاسز کو تخلیق شدہ ڈائرکٹری میں مرتب کرنے کے لیے javac کا استعمال کرتا ہے۔ runجاوا کمانڈ کے ساتھ مرتب شدہ کلاسز چلاتا ہے۔ cleanنتیجہ ڈائریکٹری کو حذف کرتا ہے۔ اگر آپ اینٹ کمانڈ کو بغیر کسی دلیل کے مین ڈائرکٹری میں چلاتے ہیں تو کمپائل ایکشن چلے گا۔ اگر کسی خاص عمل کو انجام دینے کی ضرورت ہے، تو اس کی وضاحت دلیل میں کی گئی ہے۔

D:\Java>D:/Temp/ant/bin/ant compile
Buildfile: D:\Java\build.xml

compile:
    [mkdir] Created dir: D:\Java\result\classes
    [javac] Compiling 2 source files to D:\Java\result\classes

BUILD SUCCESSFUL
Total time: 1 second

ماوین

Maven تعمیراتی منصوبوں کے لیے قدرے مختلف نقطہ نظر پیش کرتا ہے۔ یہاں ڈویلپر اپنے پروجیکٹ اور اضافی ٹولز کی وضاحت کرتا ہے جو وہ استعمال کرتا ہے، چیونٹی کے برعکس، جہاں تعمیر عمل کا ایک سلسلہ ہے۔ Maven ڈویلپرز میں اس کے آسان انحصار کے انتظام اور تمام ترقیاتی ماحول کے ساتھ آسان انضمام کی وجہ سے مقبول ہے۔ Maven کے ساتھ کام کرتے وقت، ہم مندرجہ ذیل پراجیکٹ ڈھانچے کی پابندی کرتے ہیں: جاوا میں مرتب کرنا - 3pom.xml فائل میں تعمیر کے اصول، انحصار وغیرہ کو بیان کیا گیا ہے۔ عام طور پر یہ مرکزی پروجیکٹ فولڈر میں واقع ہوتا ہے۔ شروع ہونے پر، Maven فائل کی ساخت اور نحو کو چیک کرتا ہے، آپ کو غلطیوں کے بارے میں خبردار کرتا ہے۔ مین ڈائرکٹری میں، بن اور src فولڈرز کے آگے، pom.xml فائل بنائیں، اندر شامل کریں:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>ru.javarush.testmaven</groupId>
  <artifactId>testMavenWithoutIde</artifactId>
  <version>1.0.0</version>

  <build>
     <defaultGoal>compile</defaultGoal>
     <sourceDirectory>src</sourceDirectory>
     <outputDirectory>bin</outputDirectory>
     <finalName>${project.artifactId}-${project.version}</finalName>
  </build>
</project>
اگلا، کمانڈ لائن پر mvn کمانڈ چلائیں:

D:\Java>mvn
[INFO] Scanning for projects...
[INFO]
[INFO] -------------< ru.javarush.testmaven:testMavenWithoutIde >--------------
[INFO] Building testMavenWithoutIde 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testMavenWithoutIde ---
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\Java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testMavenWithoutIde ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. build is platform dependent!
[INFO] Compiling 2 source files to D:\Java\bin
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.521 s
[INFO] Finished at: 2019-06-25T20:18:05+03:00
[INFO] ------------------------------------------------------------------------
اب بن فولڈر میں ایک src فولڈر ہے جہاں مرتب شدہ کلاسز واقع ہیں۔ pom.xml میں، بلڈ ٹیگ تعمیر کے مقصد کی وضاحت کرتا ہے۔ ماون کے پاس ٹیسٹ چلانے، جار فائلیں بنانے، تقسیم کی تعمیر، اور دیگر کاموں کے لیے متعدد تعمیراتی اہداف اور پلگ ان ہیں۔

گریڈل

یہ سب سے کم عمر کا تعمیراتی نظام ہے، جو چیونٹی اور ماون پر مبنی ہے۔ بنیادی فرق یہ ہے کہ یہ کاموں کی ترتیب کا تعین کرنے کے لیے ایک ایسکلک گراف کی بنیاد پر کام کرتا ہے۔ یہ زیادہ پیچیدہ کاموں کے لیے بہت مفید ہے، جیسے کہ انکریمنٹل اور ملٹی پروجیکٹ کی تعمیر۔ Gradle کے ساتھ تعمیر کرتے وقت، Maven پروجیکٹ فولڈر کی ساخت پر قائم رہنے کی بھی سفارش کی جاتی ہے۔ ویسے، گریڈل میں عمارت کی فائل کو build.gradle کہتے ہیں اور یہ Maven کی فائل سے بہت چھوٹی نظر آتی ہے۔ ہماری کلاسوں کی مثال:
apply plugin: 'java'
apply plugin: 'application'

sourceSets {
   main {
       java {
           srcDirs 'src'
       }
   }
}
sourceSets.main.output.classesDir = file("bin")

mainClassName = "src.BoxMachine"

defaultTasks 'compileJava', 'run'
فائل میں پلگ ان شامل ہیں، سورس کوڈ فائلوں کی ڈائرکٹری کی وضاحت کرتی ہے (اگر ماون پروجیکٹ کا ڈھانچہ استعمال نہیں کیا جاتا ہے)، تعمیراتی نتائج کی ڈائرکٹری، مین کلاس کا نام، اور پہلے سے طے شدہ کام۔ ڈائرکٹری میں gradle کمانڈ جہاں build.gradle فائل واقع ہے تعمیر شروع کرنے کے لیے ذمہ دار ہے:

d:\Java>D:\Temp\gradle\bin\gradle

Welcome to Gradle 5.4.1!

Here are the highlights of this release:
 - Run builds with JDK12
 - New API for Incremental Tasks
 - Updates to native projects, including Swift 5 support

For more details see https://docs.gradle.org/5.4.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

> Task :help

Welcome to Gradle 5.4.1.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

To see more detail about a task, run gradle help --task <task>

For troubleshooting, visit https://help.gradle.org

BUILD SUCCESSFUL in 52s
1 actionable task: 1 executed

نتیجہ

پہلی نظر میں، IDE کے بغیر کوڈ کو مرتب کرنے اور جمع کرنے کی صلاحیت بیکار معلوم ہوتی ہے۔ درحقیقت، جب پلگ انز کے ساتھ ایک آرام دہ IDE موجود ہو تو کمانڈ لائنز اور گوگل کے تمام کمانڈز سے پریشان کیوں ہوں، ہر ممکن چیز کی خودکار جانچ (جدید IDEs IQ لیول کو چیک نہیں کرتے) اور مقبول سسٹمز کے ساتھ انضمام۔ تاہم، مشق سے پتہ چلتا ہے کہ ترقیاتی ماحول کے بغیر کوڈ کو جمع کرنے کی صلاحیت اور اس عمل کے ہر قدم کو سمجھنا ایک اشد ضرورت ہے۔ یہ مہارت آپ اور آپ کی کمپنی کے لیے بہت سے اعصابی خلیات اور وقت کی بچت کرے گی۔ آپ IDE استعمال کرنے کا طریقہ سیکھ سکتے ہیں، کوڈ لکھنے کی مشق کریں، اور یقیناً جاوا پروگرامنگ کے بنیادی اصول یہاں جاوا رش پر حاصل کریں۔ سیکھنے پر واپس جانے کا وقت :)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION