JavaRush /جاوا بلاگ /Random-SD /ڪافي بريڪ #148. ڪنهن به جاوا پروگرام کي اسٽينڊل EXE فائل ...

ڪافي بريڪ #148. ڪنهن به جاوا پروگرام کي اسٽينڊل EXE فائل ۾ ڪيئن ڦيرايو

گروپ ۾ شايع ٿيل
ماخذ: Mccue.dev اڄ توهان سکندا ته ونڊوز آپريٽنگ سسٽم تي هلائڻ لاءِ جاوا پروگرام مان هڪ قابل عمل EXE فائل ڪيئن ٺاهي. ڪافي بريڪ #148.  ڪنهن به جاوا پروگرام کي اسٽينڊل EXE فائل ۾ ڪيئن ڦيرايو - 1لانچ ڪرڻ لاءِ ڊبل ڪلڪ ڪرڻ هڪ پروگرام کولڻ جو آسان طريقو آهي. جيڪڏھن توھان جنھن ماڻھوءَ کي پنھنجي ايپليڪيشن ڏيکارڻ چاھيو ٿا ان وٽ اڳ ۾ ئي جاوا جو صحيح ورجن انسٽال ٿيل آھي، اھي ان کي هلائڻ لاءِ جار فائل تي ڊبل ڪلڪ ڪري سگھن ٿا. جيڪڏهن اهو جاوا نصب نه آهي، اتي هڪ قابل عمل انسٽالر ٺاهڻ جا طريقا آهن، جهڙوڪ jpackage . ان کان پوء، ڪوڊ هلائڻ لاء توهان کي صرف هن انسٽالر تي ڪلڪ ڪرڻ جي ضرورت آهي. توھان پڻ استعمال ڪري سگھو ٿا اصلي تصوير ڪوڊ کي ھڪڙي قابل عمل فائل ۾ تبديل ڪرڻ لاءِ جيڪو ڪنھن اضافي تنصيب جي ضرورت نه آھي. هن آرٽيڪل ۾، اسان هڪ بلڪل سادي طريقي تي ڌيان ڏينداسين جيڪو ڪنهن به ايپليڪيشن لاء ڪم ڪري ٿو، ان کان سواء توهان جو انحصار شامل آهي يا توهان ڪهڙي JVM خاصيتون استعمال ڪندا آهيو. ڪوڊ جيڪو اڄ بحث ڪيو ويندو GitHub مخزن ۾ ڳولهي سگهجي ٿو ، ۽ پروگرام سان گڏ قابل عمل فائلون هتي پوسٽ ڪيون ويون آهن .

اسٽيڪ استعمال ٿيل

جاوا 9+

java --version jlink --version

ميون

mvn - نسخو

NodeJS

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> <انحصار> <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- ڪلاس> <تعمير نمبر>1.0 </Build-Number> </manifest Entries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
هتي "سايه" پلگ ان کي سنڀاليندو، ڪوڊ سميت توهان جي سڀني انحصار کان جار ۾. انهي صورت ۾، صرف خارجي انحصار آهي org.apache.commons/commons-text .
mvn صاف پيڪيج
ان کان پوء اسان هن جار فائل کي نئين ٽارگيٽ / ڊاريڪٽري ڏانهن منتقل ڪنداسين جتي ان کي ٻين فائلن کان الڳ ڪيو ويندو.
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 منصوبن کي ايگزيڪيوٽوبلز ۾ تبديل ڪرڻ آهي، ۽ اهو سسٽم تي ڪنهن به NodeJS تنصيب کي به بنڊل ڪري سگهي ٿو. خوش قسمت، توھان ھن قدم کي ڇڏي سگھو ٿا وضاحت ڪندي --no-include-node پرچم .
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .جر"
اهو "ايپليڪيشن" نالي هڪ قابل عمل فائل ٺاهيندو. جيڪڏهن توهان ان کي ونڊوز لاءِ ٺاهي رهيا آهيو، ته پوءِ توهان کي وضاحت ڪرڻ جي ضرورت آهي “application.exe”. جڏهن قابل عمل هلندو، {{caxa}} کي عارضي ڊاريڪٽري سان تبديل ڪيو ويندو جتي zip فائل لڳايو ويو هو. مهرباني ڪري نوٽ ڪريو ته جڏهن قابل عمل فائلون ٺاهي رهيا آهن، ميڪانيزم جهڙوڪ ڪوڊ سائن ان ۽ خودڪار اپڊيٽ پڻ استعمال ڪيا ويندا آهن. بهرحال، انهن شين کي گهري مطالعي جي ضرورت آهي، جنهن کي هڪ اشاعت ۾ فٽ ڪرڻ ڏکيو آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION