ماخذ: Mccue.dev آج آپ سیکھیں گے کہ ونڈوز آپریٹنگ سسٹم پر چلانے کے لیے جاوا پروگرام سے ایگزیکیوٹیبل EXE فائل کیسے بنائی جاتی ہے۔ لانچ کرنے کے لیے ڈبل کلک کرنا کسی پروگرام کو کھولنے کے آسان ترین طریقوں میں سے ایک ہے۔ اگر آپ جس شخص کو اپنی ایپلیکیشن دکھانا چاہتے ہیں اس کے پاس جاوا کا صحیح ورژن پہلے سے انسٹال ہے، تو وہ اسے چلانے کے لیے جار فائل پر ڈبل کلک کر سکتے ہیں۔ اگر اس میں جاوا انسٹال نہیں ہے تو، ایک قابل عمل انسٹالر بنانے کے طریقے ہیں، جیسے 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);
}
}
ہمارا مقصد اب کوڈ کو اس کے انحصار کے ساتھ ایک جار میں پیک کرنا ہے۔ 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 پر مشتمل ایک جار فائل کا ہونا، جو باقی رہ جاتا ہے وہ ان کو یکجا کرنا ہے۔ ایسا کرنے کے لیے ہمیں درج ذیل کام کرنے ہوں گے۔- اپنی درخواست کے JRE اور جار پر مشتمل ڈائریکٹری کو زپ کریں۔
- اس زپ فائل کے اوپر ایک سٹب اسکرپٹ منسلک کریں، جو ڈیٹا کو ایک عارضی ڈائرکٹری میں نکالے گا اور کوڈ کو چلائے گا۔
npx caxa \ --input build \ --output application \ --no-include-node \ -- "{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .jar"
یہ "ایپلی کیشن" کے نام سے ایک قابل عمل فائل بنائے گا۔ اگر آپ اسے ونڈوز کے لیے بنا رہے ہیں، تو آپ کو "application.exe" کی وضاحت کرنے کی ضرورت ہے۔ جب ایگزیکیوٹیبل چلتا ہے، تو {{caxa}} کو عارضی ڈائرکٹری سے بدل دیا جائے گا جہاں زپ فائل کو تعینات کیا گیا تھا۔ براہ کرم نوٹ کریں کہ قابل عمل فائلیں بناتے وقت، میکانزم جیسے کوڈ پر دستخط اور خودکار اپ ڈیٹس بھی استعمال کیے جاتے ہیں۔ تاہم، ان چیزوں کے لیے گہرے مطالعہ کی ضرورت ہوتی ہے، جسے ایک اشاعت میں فٹ کرنا مشکل ہے۔
GO TO FULL VERSION