JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #148. วิธีเปลี่ยนโปรแกรม Java ให้เป็นไฟล์ EXE ...

คอฟฟี่เบรค #148. วิธีเปลี่ยนโปรแกรม Java ให้เป็นไฟล์ EXE แบบสแตนด์อโลน

เผยแพร่ในกลุ่ม
ที่มา: Mccue.dev วันนี้คุณจะได้เรียนรู้วิธีสร้างไฟล์ EXE ที่ปฏิบัติการได้จากโปรแกรม Java เพื่อทำงานบนระบบปฏิบัติการ Windows คอฟฟี่เบรค #148.  วิธีเปลี่ยนโปรแกรม Java ให้เป็นไฟล์ EXE แบบสแตนด์อโลน - 1การดับเบิลคลิกเพื่อเปิดโปรแกรมเป็นวิธีที่ง่ายที่สุดวิธีหนึ่งในการเปิดโปรแกรม หากบุคคลที่คุณต้องการแสดงแอปพลิเคชันของคุณให้ติดตั้ง Java เวอร์ชันที่ถูกต้องแล้ว พวกเขาสามารถคลิกสองครั้งที่ไฟล์ jar เพื่อเรียกใช้งานได้ หากไม่มีการติดตั้ง Java ก็มีวิธีสร้างตัวติดตั้งที่ปฏิบัติการได้เช่นjpackage หลังจากนั้นในการรันโค้ดคุณเพียงแค่คลิกที่ตัวติดตั้งนี้ คุณยังสามารถใช้Native Imageเพื่อเปลี่ยนโค้ดให้เป็นไฟล์ปฏิบัติการที่ไม่ต้องติดตั้งเพิ่มเติมใดๆ ในบทความนี้ เราจะเน้นที่แนวทางที่ค่อนข้างง่ายซึ่งใช้ได้กับแอปพลิเคชันใดๆ ไม่ว่าคุณจะรวมการขึ้นต่อกันแบบใดหรือฟีเจอร์ JVM ใดที่คุณใช้ โค้ดที่จะกล่าวถึงในวันนี้สามารถพบได้ใน พื้นที่เก็บ ข้อมูล GitHubและไฟล์ปฏิบัติการพร้อมกับโปรแกรมจะถูกโพสต์ไว้ที่นี่

กองที่ใช้แล้ว

จาวา 9+

ชวา --เวอร์ชัน jlink --version

มาเวน

mvn --version

โหนดJS

npx --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.  วิธีเปลี่ยนโปรแกรม Java ให้เป็นไฟล์ EXE แบบสแตนด์อโลน - 2เป้าหมายของเราตอนนี้คือการแพ็กโค้ดพร้อมกับการพึ่งพาลงใน jar ไฟล์ JARเป็นไฟล์ ZIP ทั่วไปที่มีโครงสร้างเพิ่มเติมเล็กน้อย สำหรับ โปรเจ็กต์ 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> <การพึ่งพา> <การพึ่งพา> <groupId> org.apache.commons</groupId> <artifactId>ข้อความทั่วไป</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>แพ็คเกจ</phase> <goals> <goal> เฉดสี</ เป้าหมาย> </ เป้าหมาย> <การกำหนดค่า> <หม้อแปลง> <การใช้งานหม้อแปลงไฟฟ้า = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>example.Main</Main- คลาส> <Build-Number>1.0</Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </โครงการ>
ที่นี่ปลั๊กอิน "แรเงา" จะจัดการการรวมโค้ดจากการขึ้นต่อกันทั้งหมดของคุณลงใน jar ในกรณีนี้ การพึ่งพาภายนอกเพียงอย่างเดียวคือorg.apache.commons /commons-text
mvn แพ็คเกจที่สะอาด
จากนั้นเราจะย้ายไฟล์ jar นี้ไปยัง เป้าหมาย / ไดเร็กทอรี ใหม่ซึ่งจะถูกแยกออกจากไฟล์อื่น
mkdir build mv เป้าหมาย/javaexe-1.0.jar build

ขั้นตอนที่ 2: สร้าง Java Runtime Environment (JRE)

หากต้องการเรียกใช้ไฟล์ jar ที่เราสร้างไว้แล้ว เราจำเป็นต้องลิงก์ไฟล์นั้นกับสภาพแวดล้อมรันไทม์ Java สำหรับสิ่งนี้ เราจะใช้jlink เนื่องจากระบบนิเวศของ Java ไม่ได้ใช้โมดูล คุณจึงอาจไม่เคยได้ยินเกี่ยวกับโมดูลเหล่านี้หรือใช้ jlink กล่าวโดยสรุปคือ jlink สามารถสร้าง “อิมเมจที่ปฏิบัติการได้แบบกำหนดเอง” ตัวอย่างเช่น คุณกำลังสร้างเว็บเซิร์ฟเวอร์ คุณไม่จำเป็นต้องมี AWT หรือ Swing ดังนั้นการรวมไว้ในโค้ดของคุณจะซ้ำซ้อน ด้วย jlink คุณสามารถสร้าง JRE ที่ไม่มี โมดูล java.desktop ได้ เลย ระบบนี้จะทำงานได้ดีที่สุดหากแอปพลิเคชันของคุณและการขึ้นต่อกันทั้งหมดมีไฟล์ module-info.javaที่คอมไพล์แล้วซึ่งจะบอก jlink อย่างชัดเจนว่าคุณต้องการรวมโมดูลใดบ้าง คุณยังสามารถกำหนดรายการโมดูลที่จำเป็นได้ด้วยตนเองโดยใช้jdeps และถึงแม้จะไม่มีโปรเจ็กต์แบบโมดูลาร์ เราก็สามารถโคลนการติดตั้ง Java ของเราลงในไดเร็กทอรีโดยใช้ jlink ได้อย่างมีประสิทธิภาพ
jlink --add-modules ALL-MODULE-PATH --output build/runtime
การรวมแต่ละโมดูลแยกกันทำให้มั่นใจได้ว่าไลบรารีเช่นorg.apache.commons/commons-textจะทำงานตามที่ตั้งใจไว้ เราแค่ต้องค้นหาว่าโมดูลใดที่เราต้องการ

ขั้นตอนที่ 3: รวม Jar และ JRE เข้ากับไฟล์ปฏิบัติการ

การมีไฟล์ jar ที่มีโค้ดและการขึ้นต่อกันทั้งหมด รวมถึง JRE สิ่งเดียวที่เหลือก็คือการรวมเข้าด้วยกัน ในการทำเช่นนี้เราจำเป็นต้องทำสิ่งต่อไปนี้:
  1. บีบอัดไดเร็กทอรีที่มี JRE และ jar ของแอปพลิเคชันของคุณ
  2. แนบสคริปต์ stub ที่ด้านบนของไฟล์ zip นี้ ซึ่งจะแยกข้อมูลลงในไดเร็กทอรีชั่วคราวและเรียกใช้โค้ด
มีไลบรารี JavaScript สำหรับสิ่งนี้ที่เรียกว่าcaxa จุดประสงค์คือเปลี่ยนโปรเจ็กต์ NodeJS ให้เป็นไฟล์ปฏิบัติการ และยังสามารถรวมการติดตั้ง NodeJS ใดๆ บนระบบได้ด้วย โชคดีที่คุณสามารถข้ามขั้นตอนนี้ ได้ โดยระบุ แฟล็ก --no-include-node
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .ขวด"
สิ่งนี้จะสร้างไฟล์ปฏิบัติการชื่อ “แอปพลิเคชัน” หากคุณกำลังสร้างมันสำหรับ Windows คุณจะต้องระบุ “application.exe” เมื่อปฏิบัติการรัน {{caxa}} จะถูกแทนที่ด้วยไดเร็กทอรีชั่วคราวที่ใช้ไฟล์ zip โปรดทราบว่าเมื่อสร้างไฟล์ปฏิบัติการ กลไกต่างๆ เช่น การลงนามโค้ดและการอัปเดตอัตโนมัติก็ถูกนำมาใช้เช่นกัน อย่างไรก็ตาม สิ่งเหล่านี้จำเป็นต้องศึกษาให้ลึกซึ้งยิ่งขึ้น ซึ่งเป็นเรื่องยากที่จะรวมไว้ในสิ่งพิมพ์เดียว
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION