JavaRush /Java блогу /Random-KY /Кофе-брейк №148. Кандайдыр бир Java программасын кантип ө...

Кофе-брейк №148. Кандайдыр бир Java программасын кантип өз алдынча EXE файлына айландыруу керек

Группада жарыяланган
Булак: Mccue.dev Бүгүн сиз Windows операциялык тутумунда иштөө үчүн Java программасынан аткарылуучу EXE файлын түзүүнү үйрөнөсүз. Кофе-брейк №148.  Кандайдыр бир Java программасын кантип өз алдынча EXE файлына айландыруу керек - 1Ишке киргизүү үчүн эки жолу чыкылdateу - программаны ачуунун эң оңой жолдорунун бири. Эгер сиз колдонмоңузду көрсөткүңүз келген адамда Javaнын туура versionсы орнотулган болсо, алар аны иштетүү үчүн jar файлын эки жолу чыкылдата алышат. Эгерде анда Java орнотулбаса, анда jpackage сыяктуу аткарылуучу орнотуучуну түзүүнүн жолдору бар . Андан кийин, codeду иштетүү үчүн сиз жөн гана бул орноткучту басышыңыз керек. Кодду эч кандай кошумча орнотууну талап кылбаган аткарылуучу файлга айландыруу үчүн Native Image колдонсоңуз болот . Бул макалада биз кандай көз карандылыкты камтыбаңыз же JVM функцияларын колдонгонуңузга карабастан, ар кандай тиркемеде иштей турган жөнөкөй ыкмага токтолобуз. Бүгүн талкуулана турган codeду GitHub репозиторийинен тапса болот жана программа менен аткарылуучу файлдар бул жерде жайгаштырылган .

Стек колдонулган

Java 9+

java --version jlink --version

Maven

mvn --version

NodeJS

npx --version

1-кадам: Кодуңузду компиляциялап, банкага топтоңуз

Бул негизги программа текст менен жөнөкөй терезени түзөт, аны сиз интерфейстеги баскычтардын бирин басуу менен өзгөртө аласыз.
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);
    }
}
Кофе-брейк №148.  Кандайдыр бир Java программасын кантип өз алдынча EXE файлына айландыруу керек - 2Биздин максат азыр codeду анын көз карандылыгы менен банкага топтоо. JAR файлдары - бул кадимки ZIP архивдери, бир аз кошумча структурасы бар. Maven долбоору үчүн конфигурация ушундай болот.
<?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>мисалы</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>пакет</phase> <goals> <goal> shade</goal> </goals> <configuration> <transformers> <transformer application="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>example.Main</Main- Класс> <Build-Number>1.0</Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
Бул жерде "көлөкө" плагини банкка сиздин бардык көз карандылыктарыңыздан codeду кошот. Бул учурда, бир гана тышкы көз карандылык болуп саналат org.apache.commons/commons-text .
mvn таза пакет
Андан кийин биз бул jar файлын башка файлдардан бөлүнө турган жаңы максатка/ каталогго жылдырабыз .
mkdir куруу mv максаттуу/javaexe-1.0.jar куруу

2-кадам: Java Runtime Environment (JRE) түзүү

Биз буга чейин түзгөн jar файлын иштетүү үчүн аны Java иштөө чөйрөсүнө байланыштырышыбыз керек. Бул үчүн биз jlink колдонобуз . Java экосистемасы модулдарды колдонбогондуктан, сиз алар жөнүндө уккан эмессиз же jlink колдонгон эмессиз. Кыскача айтканда, jlink "өзгөчө аткарылуучу сүрөттөрдү" түзө алат. Мисалы, сиз веб-server жасап жатасыз. Сизге AWT же Swingдин кереги жок, андыктан аларды codeуңузга кошуу ашыкча болуп калат. jlink менен java.desktop модулун такыр камтыбаган JRE түзө аласыз . Бул система сиздин тиркемеңиз жана анын бардык көз карандылыгы компиляцияланган module-info.java файлдарын камтыса жакшы иштейт , алар jlinkке кайсы модулдарды киргизгиңиз келгенин так айтып берет. Ошондой эле jdeps аркылуу керектүү модулдардын тизмесин кол менен аныктай аласыз . Модулдук долбоор болбосо дагы, биз Java орнотуубузду jlink аркылуу каталогго эффективдүү клондой алабыз.
jlink --add-modules ALL-MODULE-PATH --чыгаруу куруу/иштөө убактысы
Ар бир модулду өзүнчө кошуу org.apache.commons/commons-text сыяктуу китепканалардын ойдогудай иштешин камсыздайт. Бизге кайсы модулдар керек экенин аныкташыбыз керек.

3-кадам: Jar менен JREни аткарылуучу файлга бириктириңиз

Кодду жана анын бардык көз карандылыктарын, ошондой эле JREди камтыган jar файлына ээ болгондо, аларды бириктирүү гана калды. Бул үчүн биз төмөнкүлөрдү кылышыбыз керек:
  1. Колдонмоңуздун JRE жана банкасын камтыган каталогду Zip.
  2. Бул zip файлдын жогору жагына stub скрипти тиркеңиз, ал маалыматтарды убактылуу каталогго чыгарып, codeду иштетет.
Бул үчүн caxa деп аталган JavaScript китепканасы бар . Анын максаты NodeJS долбоорлорун аткарылуучуга айландыруу, ошондой эле системадагы каалаган NodeJS орнотууларын бириктире алат. Бактыга жараша, --no-include-node желекчесин көрсөтүү менен бул кадамды өткөрүп жиберсеңиз болот .
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1,0 .jar"
Бул "колдонмо" деп аталган аткарылуучу файлды түзөт. Эгер сиз аны Windows үчүн түзүп жатсаңыз, анда "application.exe" көрсөтүшүңүз керек. Аткарылуучу файл иштегенде, {{caxa}} zip файлы жайгаштырылган убактылуу каталог менен алмаштырылат. Аткарылуучу файлдарды түзүүдө codeго кол коюу жана автоматтык жаңыртуу сыяктуу механизмдер да колдонулаарын эске алыңыз. Бирок бул нерселер тереңирээк изилдөөнү талап кылат, аны бир басылмага батыруу кыйын.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION