JavaRush /Blog Jawa /Random-JV /Ngopi #148. Cara ngowahi program Java dadi file EXE mandi...

Ngopi #148. Cara ngowahi program Java dadi file EXE mandiri

Diterbitake ing grup
Sumber: Mccue.dev Dina iki sampeyan bakal sinau carane nggawe file EXE eksekusi saka program Java kanggo mbukak ing sistem operasi Windows. Ngopi #148.  Cara ngowahi program Java dadi file EXE mandiri - 1Klik kaping pindho kanggo mbukak minangka salah sawijining cara paling gampang kanggo mbukak program. Yen wong sing pengin dituduhake aplikasi sampeyan wis nginstal versi Java sing bener, dheweke bisa ngeklik kaping pindho file jar kanggo mbukak. Yen ora diinstal Java, ana cara kanggo nggawe installer eksekusi, kayata jpackage . Sawise iku, kanggo mbukak kode sampeyan mung kudu ngeklik installer iki. Sampeyan uga bisa nggunakake Native Image kanggo ngowahi kode dadi file eksekusi sing ora mbutuhake instalasi tambahan. Ing artikel iki, kita bakal fokus ing pendekatan sing cukup prasaja sing bisa digunakake kanggo aplikasi apa wae, ora preduli saka dependensi sing sampeyan lebokake utawa fitur JVM sing sampeyan gunakake. Kode sing bakal dibahas saiki bisa ditemokake ing gudang GitHub , lan file eksekusi karo program kasebut dikirim ing kene .

Tumpukan digunakake

Jawa 9+

java --version jlink --version

Maven

mvn --versi

NodeJS

npx --versi

Langkah 1: Compile lan paket kode menyang jar

Program dhasar iki bakal nggawe jendhela prasaja kanthi teks sing bisa diganti kanthi ngeklik salah sawijining tombol ing antarmuka.
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);
    }
}
Ngopi #148.  Cara ngowahi program Java dadi file EXE mandiri - 2Tujuane saiki yaiku kanggo ngemas kode bebarengan karo dependensi menyang jar. File JAR minangka arsip ZIP biasa kanthi struktur ekstra. Kanggo proyek Maven konfigurasi bakal katon kaya iki.
<?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>conto</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> shade</goal> </goals> <configuration> <transformers> <transformer implementation = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>conto.Main</Main- Kelas> <Build-Number>1.0</Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </proyek>
Ing kene plugin "shade" bakal nangani kalebu kode saka kabeh dependensi menyang jar. Ing kasus iki, siji-sijine ketergantungan eksternal yaiku org.apache.commons/commons-text .
mvn paket resik
Banjur kita bakal mindhah file jar iki menyang target / direktori anyar sing bakal dipisahake saka file liyane.
mkdir mbangun mv target / javaexe-1.0.jar mbangun

Langkah 2: Nggawe Java Runtime Environment (JRE)

Kanggo mbukak file jar sing wis digawe, kita kudu nyambungake menyang lingkungan runtime Java. Kanggo iki kita bakal nggunakake jlink . Wiwit ekosistem Jawa ora nggunakake modul, sampeyan mbokmenawa durung krungu utawa nggunakake jlink. Ing cendhak, jlink bisa nggawe "gambar eksekusi khusus". Contone, sampeyan nggawe server web. Sampeyan ora perlu AWT utawa Swing, supaya kalebu ing kode bakal keluwih. Kanthi jlink sampeyan bisa nggawe JRE sing ora kalebu modul java.desktop ing kabeh . Sistem iki paling apik yen aplikasi sampeyan lan kabeh dependensi kalebu file modul-info.java sing dikompilasi , sing ngandhani jlink modul apa sing pengin dilebokake. Sampeyan uga bisa kanthi manual nemtokake dhaptar modul sing dibutuhake nggunakake jdeps . Lan sanajan tanpa proyek modular, kita bisa kanthi efektif kloning instalasi Java menyang direktori nggunakake jlink.
jlink --add-modules ALL-MODULE-PATH --output build/runtime
Kalebu saben modul kanthi individu mesthekake yen perpustakaan kayata org.apache.commons/commons-text bakal bisa digunakake kaya sing dikarepake. Kita mung kudu ngerti modul sing dibutuhake.

Langkah 3: Gabungke Jar lan JRE dadi eksekusi

Duwe file jar sing ngemot kode lan kabeh dependensi, uga JRE, sing isih ana yaiku nggabungake. Kanggo nindakake iki, kita kudu nindakake ing ngisor iki:
  1. Zip direktori sing ngemot JRE lan jar aplikasi sampeyan.
  2. Pasang skrip rintisan ing sisih ndhuwur file zip iki, sing bakal ngekstrak data menyang direktori sementara lan mbukak kode kasebut.
Ana perpustakaan JavaScript kanggo iki disebut caxa . Tujuane yaiku ngowahi proyek NodeJS dadi eksekusi, lan uga bisa nggabungake instalasi NodeJS ing sistem kasebut. Untunge, sampeyan bisa ngliwati langkah iki kanthi nemtokake --no-include-node flag .
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .jar"
Iki bakal nggawe file eksekusi kanthi jeneng "aplikasi". Yen sampeyan nggawe kanggo Windows, sampeyan kudu nemtokake "application.exe". Nalika eksekusi lumaku, {{caxa}} bakal diganti karo direktori sauntara ing ngendi file zip dipasang. Elinga yen nalika nggawe file eksekusi, mekanisme kayata tandha kode lan nganyari otomatis uga digunakake. Nanging, prekara-prekara kasebut mbutuhake sinau sing luwih jero, sing angel cocog karo siji publikasi.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION