Mənbə: Mccue.dev Bu gün siz Windows əməliyyat sistemində işləmək üçün Java proqramından icra edilə bilən EXE faylı yaratmağı öyrənəcəksiniz. Başlamaq üçün iki dəfə klikləmək proqramı açmağın ən asan yollarından biridir. Tətbiqinizi göstərmək istədiyiniz şəxsdə artıq Java-nın düzgün versiyası quraşdırılıbsa, onu işə salmaq üçün jar faylına iki dəfə klikləyə bilər. Əgər onda Java quraşdırılmayıbsa, jpackage kimi icra edilə bilən quraşdırıcı yaratmağın yolları var . Bundan sonra kodu işə salmaq üçün bu quraşdırıcıya klikləmək kifayətdir. Siz həmçinin kodu hər hansı əlavə quraşdırma tələb etməyən icra edilə bilən fayla çevirmək üçün Native Image istifadə edə bilərsiniz. Bu yazıda hansı asılılıqları daxil etdiyinizdən və ya hansı JVM funksiyalarından istifadə etdiyinizdən asılı olmayaraq, istənilən proqram üçün işləyən kifayət qədər sadə yanaşmaya diqqət yetirəcəyik. Bu gün müzakirə ediləcək kod GitHub repozitoriyasında tapıla bilər və proqramla birlikdə icra edilə bilən fayllar burada yerləşdirilir .
İstifadə olunan yığın
Java 9+
java --versiya jlink --versiya
Maven
mvn --versiya
NodeJS
npx --versiya
Addım 1: Kodunuzu tərtib edin və bankaya yığın
Bu əsas proqram interfeysdəki düymələrdən birini klikləməklə dəyişdirə biləcəyiniz mətnlə sadə bir pəncərə yaradacaq.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);
}
}
İndi məqsədimiz kodu asılılıqları ilə birlikdə bankaya paketləməkdir. JAR faylları əlavə strukturu az olan adi ZIP arxivləridir. Maven layihəsi üçün konfiqurasiya bu kimi görünəcək.
<?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>nümunə</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> <faza>paket</phase> <maqsadlar> <məqsəd> kölgə</goal> </goals> <konfiqurasiya> <transformers> <transformer application="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>example.Main</Main- Sinif> <Yaradıcı Nömrə>1.0</Yapı-Nömrəsi> </manifestEntries> </transformer> </transformers> </konfiqurasiya> </execution> </executions> </plugin> </plugins> </build> </layihə>
Burada "kölgə" plagini bütün asılılıqlarınızdan kodu bankaya daxil etməklə idarə edəcək. Bu halda, yeganə xarici asılılıq org.apache.commons/commons-text-dir .
mvn təmiz paket
Daha sonra bu jar faylını digər fayllardan ayrılacaq yeni hədəf/ kataloqa köçürəcəyik .
mkdir build mv target/javaexe-1.0.jar build
Addım 2: Java Runtime Environment (JRE) yaradın
Artıq yaratdığımız jar faylını işə salmaq üçün onu Java işləmə mühiti ilə əlaqələndirməliyik. Bunun üçün jlink istifadə edəcəyik . Java ekosistemi modullardan istifadə etmədiyinə görə, yəqin ki, siz onlar haqqında eşitməmisiniz və ya jlink-dən istifadə etməmisiniz. Bir sözlə, jlink “xüsusi icra olunan şəkillər” yarada bilər. Məsələn, siz veb server yaradırsınız. Sizə AWT və ya Swing lazım deyil, ona görə də onları kodunuza daxil etmək lazımsız olacaq. jlink ilə siz ümumiyyətlə java.desktop modulunu daxil etməyən JRE yarada bilərsiniz . Tətbiqinizə və onun bütün asılılıqlarına tərtib edilmiş modul-info.java faylları daxil olarsa, bu sistem ən yaxşı şəkildə işləyir , hansı modulları daxil etmək istədiyinizi jlink-ə dəqiq bildirir. Siz həmçinin jdeps istifadə edərək tələb olunan modulların siyahısını əl ilə müəyyən edə bilərsiniz . Hətta modul layihə olmasa belə, biz Java quraşdırmamızı jlink istifadə edərək effektiv şəkildə kataloqa klonlaya bilərik.
jlink --add-modules ALL-MODULE-PATH --çıxış qurma/iş vaxtı
Hər modulun ayrıca daxil edilməsi org.apache.commons/commons-text kimi kitabxanaların nəzərdə tutulduğu kimi işləməsini təmin edir. Sadəcə hansı modullara ehtiyacımız olduğunu müəyyənləşdirməliyik.
Addım 3: Jar və JRE-ni icra olunana birləşdirin
Kodu və onun bütün asılılıqlarını, eləcə də JRE-ni ehtiva edən bir jar faylına sahib olmaq üçün qalan yalnız onları birləşdirməkdir. Bunu etmək üçün aşağıdakıları etməliyik:- Tətbiqinizin JRE və bankasını ehtiva edən kataloqu zipləyin.
- Məlumatı müvəqqəti kataloqa çıxaracaq və kodu işlədəcək bu zip faylının yuxarı hissəsinə stub skript əlavə edin.
npx caxa \ --input build \ --output proqram \ --no-include-node \ -- "{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1,0 .jar"
Bu, "tətbiq" adlı icra edilə bilən bir fayl yaradacaqdır. Əgər onu Windows üçün yaradırsınızsa, onda “application.exe” faylını göstərməlisiniz. İcra olunan fayl işə salındıqda, {{caxa}} zip faylının yerləşdirildiyi müvəqqəti kataloqla əvəz olunacaq. Nəzərə alın ki, icra edilə bilən fayllar yaradarkən kod imzalanması və avtomatik yeniləmə kimi mexanizmlərdən də istifadə olunur. Bununla belə, bu şeylər daha dərin araşdırma tələb edir, onu bir nəşrə sığdırmaq çətindir.
GO TO FULL VERSION