Sumber: Mccue.dev Dina iki sampeyan bakal sinau carane nggawe file EXE eksekusi saka program Java kanggo mbukak ing sistem operasi Windows. Klik 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);
}
}
Tujuane 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:- Zip direktori sing ngemot JRE lan jar aplikasi sampeyan.
- Pasang skrip rintisan ing sisih ndhuwur file zip iki, sing bakal ngekstrak data menyang direktori sementara lan mbukak kode kasebut.
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.
GO TO FULL VERSION