JavaRush /Java Blogu /Random-AZ /Kofe fasiləsi №148. Hər hansı bir Java proqramını müstəqi...

Kofe fasiləsi №148. Hər hansı bir Java proqramını müstəqil EXE faylına necə çevirmək olar

Qrupda dərc edilmişdir
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. Kofe fasiləsi №148.  İstənilən Java proqramını müstəqil EXE faylına necə çevirmək olar - 1Baş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);
    }
}
Kofe fasiləsi №148.  İstənilən Java proqramını müstəqil EXE faylına necə çevirmək olar - 2İ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:
  1. Tətbiqinizin JRE və bankasını ehtiva edən kataloqu zipləyin.
  2. 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.
Bunun üçün caxa adlı JavaScript kitabxanası var . Onun məqsədi NodeJS layihələrini icra edilə bilənlərə çevirməkdir və o, həmçinin sistemdə istənilən NodeJS qurğularını birləşdirə bilər. Xoşbəxtlikdən, --no-include-node bayrağını göstərərək bu addımı atlaya bilərsiniz .
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.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION