JavaRush /Java blogi /Random-UZ /Kofe tanaffusi №148. Har qanday Java dasturini mustaqil E...

Kofe tanaffusi №148. Har qanday Java dasturini mustaqil EXE fayliga qanday aylantirish mumkin

Guruhda nashr etilgan
Manba: Mccue.dev Bugun siz Windows operatsion tizimida ishlash uchun Java dasturidan bajariladigan EXE faylni qanday yaratishni o'rganasiz. Kofe tanaffusi №148.  Har qanday Java dasturini mustaqil EXE faylga qanday aylantirish mumkin - 1Ishga tushirish uchun ikki marta bosish dasturni ochishning eng oson usullaridan biridir. Agar ilovangizni ko'rsatmoqchi bo'lgan odamda Java-ning to'g'ri versiyasi allaqachon o'rnatilgan bo'lsa, ular uni ishga tushirish uchun jar faylini ikki marta bosishlari mumkin. Agar unda Java o'rnatilmagan bo'lsa, jpackage kabi bajariladigan o'rnatuvchini yaratish usullari mavjud . Shundan so'ng, kodni ishga tushirish uchun ushbu o'rnatuvchini bosishingiz kifoya. Kodni qo'shimcha o'rnatishni talab qilmaydigan bajariladigan faylga aylantirish uchun Native Image- dan ham foydalanishingiz mumkin . Ushbu maqolada biz qanday bog'liqliklarni o'z ichiga olganingizdan yoki qaysi JVM xususiyatlaridan foydalanganingizdan qat'i nazar, har qanday dastur uchun ishlaydigan juda oddiy yondashuvga e'tibor qaratamiz. Bugun muhokama qilinadigan kodni GitHub omborida topish mumkin va dastur bilan bajariladigan fayllar bu erda joylashtirilgan .

Ishlatilgan stack

Java 9+

java --versiya jlink --versiya

Maven

mvn --versiya

NodeJS

npx --versiya

1-qadam: Kodingizni kompilyatsiya qiling va bankaga joylashtiring

Ushbu asosiy dastur interfeysdagi tugmalardan birini bosish orqali o'zgartirishingiz mumkin bo'lgan matnli oddiy oynani yaratadi.
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 tanaffusi №148.  Har qanday Java dasturini mustaqil EXE faylga qanday aylantirish mumkin - 2Endi bizning maqsadimiz kodni bog'liqliklari bilan birga bankaga to'plashdir. JAR fayllari oddiy ZIP arxivlari bo'lib, unchalik katta bo'lmagan tuzilishga ega. Maven loyihasi uchun konfiguratsiya shunday ko'rinadi.
<?xml version="1.0" encoding="UTF-8"?> <loyiha 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>misol</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>paket</phase> <goals> <goal> soya</goal> </goals> <configuration> <transformers> <transformer application="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>misol.Asosiy</Main- Class> <Build-Number>1.0</Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </loyiha>
Bu erda "soya" plagini sizning barcha bog'liqliklaringiz kodini kavanozga kiritadi. Bunday holda, yagona tashqi bog'liqlik org.apache.commons/commons-text hisoblanadi .
mvn toza to'plami
Keyin biz ushbu jar faylini boshqa fayllardan ajratiladigan yangi maqsad/ katalogga o'tkazamiz .
mkdir build mv target/javaexe-1.0.jar qurish

2-qadam: Java Runtime Environment (JRE) yarating

Biz allaqachon yaratgan jar faylini ishga tushirish uchun uni Java ish vaqti muhiti bilan bog'lashimiz kerak. Buning uchun jlink dan foydalanamiz . Java ekotizimida modullardan foydalanilmagani uchun siz ular haqida eshitmagan yoki jlink-dan foydalanmagansiz. Muxtasar qilib aytganda, jlink "moslashtirilgan bajariladigan tasvirlarni" yaratishi mumkin. Masalan, siz veb-server yaratyapsiz. Sizga AWT yoki Swing kerak emas, shuning uchun ularni kodingizga kiritish ortiqcha bo'ladi. jlink bilan java.desktop modulini umuman o'z ichiga olmaydi JRE yaratishingiz mumkin . Agar ilovangiz va uning barcha bog'liqliklari jlinkga aynan qaysi modullarni qo'shmoqchi ekanligingizni bildiruvchi kompilyatsiya qilingan modul-info.java fayllarini o'z ichiga olsa, bu tizim eng yaxshi ishlaydi. Shuningdek, jdeps yordamida kerakli modullar ro'yxatini qo'lda belgilashingiz mumkin . Va hatto modulli loyiha bo'lmasa ham, biz Java o'rnatishimizni jlink yordamida katalogga samarali klonlashimiz mumkin.
jlink --add-modules ALL-MODULE-PATH --chiqish qurish/ish vaqti
Har bir modulni alohida kiritish org.apache.commons/commons-text kabi kutubxonalarning mo‘ljallanganidek ishlashini ta’minlaydi. Biz faqat qaysi modullar kerakligini aniqlashimiz kerak.

3-qadam: Jar va JRE ni bajariladigan faylga birlashtiring

Kodni va uning barcha bog'liqliklarini, shuningdek JREni o'z ichiga olgan jar fayliga ega bo'lgan holda, ularni birlashtirish qoladi. Buning uchun biz quyidagilarni qilishimiz kerak:
  1. Ilovangizning JRE va kavanozini o'z ichiga olgan katalogni ziplang.
  2. Ushbu zip faylning yuqori qismiga stub skriptini qo'shing, bu ma'lumotlarni vaqtinchalik katalogga chiqaradi va kodni ishga tushiradi.
Buning uchun caxa deb nomlangan JavaScript kutubxonasi mavjud . Uning maqsadi NodeJS loyihalarini bajariladigan fayllarga aylantirishdir va u tizimdagi istalgan NodeJS o'rnatishlarini ham birlashtira oladi. Yaxshiyamki, --no-include-node bayrog'ini ko'rsatib, bu bosqichni o'tkazib yuborishingiz mumkin .
npx caxa \ --input build \ --output application \ --no-include-tugun \ -- ​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1,0 .jar"
Bu "ilova" nomli bajariladigan faylni yaratadi. Agar siz uni Windows uchun yaratayotgan bo'lsangiz, unda "application.exe" ni ko'rsatishingiz kerak. Bajariladigan fayl ishga tushganda, {{caxa}} zip fayli joylashtirilgan vaqtinchalik katalog bilan almashtiriladi. E'tibor bering, bajariladigan fayllarni yaratishda kodni imzolash va avtomatik yangilash kabi mexanizmlar ham qo'llaniladi. Biroq, bu narsalar chuqurroq o'rganishni talab qiladi, uni bitta nashrga sig'dirish qiyin.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION