JavaRush /جاوا بلاگ /Random-UR /کافی وقفہ نمبر 148۔ کسی بھی جاوا پروگرام کو اسٹینڈ اسٹون ...

کافی وقفہ نمبر 148۔ کسی بھی جاوا پروگرام کو اسٹینڈ اسٹون EXE فائل میں کیسے تبدیل کیا جائے۔

گروپ میں شائع ہوا۔
ماخذ: Mccue.dev آج آپ سیکھیں گے کہ ونڈوز آپریٹنگ سسٹم پر چلانے کے لیے جاوا پروگرام سے ایگزیکیوٹیبل EXE فائل کیسے بنائی جاتی ہے۔ کافی وقفہ نمبر 148۔  کسی بھی جاوا پروگرام کو اسٹینڈ اسٹون EXE فائل میں کیسے تبدیل کیا جائے - 1لانچ کرنے کے لیے ڈبل کلک کرنا کسی پروگرام کو کھولنے کے آسان ترین طریقوں میں سے ایک ہے۔ اگر آپ جس شخص کو اپنی ایپلیکیشن دکھانا چاہتے ہیں اس کے پاس جاوا کا صحیح ورژن پہلے سے انسٹال ہے، تو وہ اسے چلانے کے لیے جار فائل پر ڈبل کلک کر سکتے ہیں۔ اگر اس میں جاوا انسٹال نہیں ہے تو، ایک قابل عمل انسٹالر بنانے کے طریقے ہیں، جیسے jpackage ۔ اس کے بعد، کوڈ کو چلانے کے لیے آپ کو صرف اس انسٹالر پر کلک کرنے کی ضرورت ہے۔ آپ کوڈ کو ایک قابل عمل فائل میں تبدیل کرنے کے لیے Native Image بھی استعمال کر سکتے ہیں جس کے لیے کسی اضافی انسٹالیشن کی ضرورت نہیں ہے۔ اس آرٹیکل میں، ہم کافی آسان طریقہ پر توجہ مرکوز کریں گے جو کسی بھی ایپلیکیشن کے لیے کام کرتا ہے، اس سے کوئی فرق نہیں پڑتا ہے کہ آپ کیا انحصار کرتے ہیں یا آپ JVM کی کون سی خصوصیات استعمال کرتے ہیں۔ جس کوڈ پر آج بحث کی جائے گی وہ GitHub ریپوزٹری میں پایا جا سکتا ہے ، اور پروگرام کے ساتھ قابل عمل فائلیں یہاں پوسٹ کی گئی ہیں ۔

اسٹیک استعمال کیا گیا۔

Java 9+

java --version jlink --version

ماوین

mvn --version

نوڈ جے ایس

npx -- ورژن

مرحلہ 1: اپنے کوڈ کو مرتب کریں اور ایک جار میں پیک کریں۔

یہ بنیادی پروگرام متن کے ساتھ ایک سادہ ونڈو بنائے گا جسے آپ انٹرفیس کے کسی ایک بٹن پر کلک کر کے تبدیل کر سکتے ہیں۔
package example;

import org.apache.commons.text.WordUtils;

import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        var label = new JLabel("Hello, World!");
        label.setFont(new Font("Serif", Font.PLAIN, 72));

        var uppercaseButton = new JButton("Uppercase");
        uppercaseButton.addActionListener(e ->
            label.setText(WordUtils.capitalize(label.getText()))
        );

        var lowercaseButton = new JButton("lowercase");
        lowercaseButton.addActionListener(e ->
            label.setText(WordUtils.uncapitalize(label.getText()))
        );

        var panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(label);
        panel.add(uppercaseButton);
        panel.add(lowercaseButton);

        var frame = new JFrame("Basic Program");
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}
کافی وقفہ نمبر 148۔  کسی بھی جاوا پروگرام کو اسٹینڈ اکیلے EXE فائل میں کیسے تبدیل کیا جائے - 2ہمارا مقصد اب کوڈ کو اس کے انحصار کے ساتھ ایک جار میں پیک کرنا ہے۔ JAR فائلیں معمولی اضافی ساخت کے ساتھ باقاعدہ زپ آرکائیوز ہیں۔ Maven پروجیکٹ کے لیے کنفیگریشن اس طرح نظر آئے گی۔
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 .org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>مثال</groupId> <artifactId>javaexe</artifactId> <version>1.0</version> <properties> <project.build.sourceEncoding>UTF-8</project .build.sourceEncoding> <maven.compiler.source>18</maven.compiler.source> <maven.compiler.target>18</maven.compiler.target> </properties> <dependencies> <dependency> <groupId> org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>1.9</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache .maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal> شیڈ</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>example.Main</Main- کلاس> <Build-Number>1.0</Build-Number> </manifest Entries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
یہاں "شیڈ" پلگ ان آپ کے تمام انحصار سے جار میں کوڈ سمیت ہینڈل کرے گا۔ اس صورت میں، صرف بیرونی انحصار org.apache.commons/commons-text ہے ۔
ایم وی این کلین پیکج
اس کے بعد ہم اس جار فائل کو ایک نئے ٹارگٹ/ ڈائریکٹری میں منتقل کریں گے جہاں اسے دوسری فائلوں سے الگ کر دیا جائے گا۔
mkdir build mv target/javaexe-1.0.jar بلڈ

مرحلہ 2: جاوا رن ٹائم ماحول بنائیں (JRE)

جار فائل کو چلانے کے لیے جو ہم پہلے ہی بنا چکے ہیں، ہمیں اسے جاوا رن ٹائم ماحول سے جوڑنے کی ضرورت ہے۔ اس کے لیے ہم jlink استعمال کریں گے ۔ چونکہ جاوا ایکو سسٹم ماڈیولز کا استعمال نہیں کرتا ہے، اس لیے آپ نے شاید ان کے بارے میں نہیں سنا ہوگا یا jlink استعمال نہیں کیا ہوگا۔ مختصر میں، jlink "کسٹم ایگزیکیوٹیبل امیجز" بنا سکتا ہے۔ مثال کے طور پر، آپ ایک ویب سرور بنا رہے ہیں۔ آپ کو AWT یا Swing کی ضرورت نہیں ہے، لہذا انہیں اپنے کوڈ میں شامل کرنا بے کار ہو گا۔ jlink کے ساتھ آپ ایک JRE بنا سکتے ہیں جس میں java.desktop ماڈیول بالکل شامل نہیں ہے ۔ یہ سسٹم بہترین کام کرتا ہے اگر آپ کی ایپلی کیشن اور اس کے تمام انحصار میں مرتب شدہ module-info.java فائلیں شامل ہوں ، جو jlink کو بالکل بتاتی ہیں کہ آپ کون سے ماڈیولز شامل کرنا چاہتے ہیں۔ آپ jdeps کا استعمال کرتے ہوئے مطلوبہ ماڈیولز کی فہرست کو دستی طور پر بھی بیان کر سکتے ہیں ۔ اور یہاں تک کہ ماڈیولر پروجیکٹ کے بغیر بھی، ہم jlink کا استعمال کرتے ہوئے اپنی جاوا انسٹالیشن کو ایک ڈائرکٹری میں مؤثر طریقے سے کلون کر سکتے ہیں۔
jlink --add-modules ALL-MODULE-PATH --output build/runtime
ہر ماڈیول کو انفرادی طور پر شامل کرنا یقینی بناتا ہے کہ org.apache.commons/commons-text جیسی لائبریریاں حسب منشا کام کریں گی۔ ہمیں صرف یہ معلوم کرنے کی ضرورت ہے کہ ہمیں کون سے ماڈیولز کی ضرورت ہے۔

مرحلہ 3: جار اور JRE کو ایک قابل عمل میں جوڑیں۔

کوڈ اور اس کے تمام انحصارات کے ساتھ ساتھ JRE پر مشتمل ایک جار فائل کا ہونا، جو باقی رہ جاتا ہے وہ ان کو یکجا کرنا ہے۔ ایسا کرنے کے لیے ہمیں درج ذیل کام کرنے ہوں گے۔
  1. اپنی درخواست کے JRE اور جار پر مشتمل ڈائریکٹری کو زپ کریں۔
  2. اس زپ فائل کے اوپر ایک سٹب اسکرپٹ منسلک کریں، جو ڈیٹا کو ایک عارضی ڈائرکٹری میں نکالے گا اور کوڈ کو چلائے گا۔
اس کے لیے جاوا اسکرپٹ لائبریری ہے جسے caxa کہتے ہیں ۔ اس کا مقصد NodeJS پروجیکٹس کو executables میں تبدیل کرنا ہے، اور یہ سسٹم پر کسی بھی NodeJS تنصیبات کو بھی بنڈل کر سکتا ہے۔ خوش قسمتی سے، آپ --no-include-node پرچم کی وضاحت کرکے اس قدم کو چھوڑ سکتے ہیں ۔
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .jar"
یہ "ایپلی کیشن" کے نام سے ایک قابل عمل فائل بنائے گا۔ اگر آپ اسے ونڈوز کے لیے بنا رہے ہیں، تو آپ کو "application.exe" کی وضاحت کرنے کی ضرورت ہے۔ جب ایگزیکیوٹیبل چلتا ہے، تو {{caxa}} کو عارضی ڈائرکٹری سے بدل دیا جائے گا جہاں زپ فائل کو تعینات کیا گیا تھا۔ براہ کرم نوٹ کریں کہ قابل عمل فائلیں بناتے وقت، میکانزم جیسے کوڈ پر دستخط اور خودکار اپ ڈیٹس بھی استعمال کیے جاتے ہیں۔ تاہم، ان چیزوں کے لیے گہرے مطالعہ کی ضرورت ہوتی ہے، جسے ایک اشاعت میں فٹ کرنا مشکل ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION