JavaRush /Блоги Java /Random-TG /Кофе-брейк №148. Чӣ тавр ягон барномаи Java-ро ба файли м...

Кофе-брейк №148. Чӣ тавр ягон барномаи Java-ро ба файли мустақили EXE табдил додан мумкин аст

Дар гурӯҳ нашр шудааст
Сарчашма: Mccue.dev Имрӯз шумо мефаҳмед, ки чӣ тавр сохтани файли иҷрошавандаи EXE аз барномаи Java барои кор дар системаи оператсионии Windows. Кофе-брейк №148.  Чӣ тавр ягон барномаи Java-ро ба файли мустақor EXE табдил додан мумкин аст - 1Ду маротиба клик кардан барои оғоз кардан яке аз роҳҳои осонтарини кушодани барнома мебошад. Агар шахсе, ки шумо мехоҳед барномаи худро нишон диҳед, аллакай versionи дурусти Java-ро насб карда бошад, онҳо метавонанд файли jar-ро ду маротиба клик кунанд, то онро иҷро кунанд. Агар дар он Java насб нашуда бошад, роҳҳои эҷоди насбкунандаи иҷрошаванда, ба монанди jpackage мавҷуданд . Пас аз он, барои иҷро кардани code ба шумо танҳо лозим аст, ки ин насбкунандаро клик кунед. Шумо инчунин метавонед тасвири модариро истифода баред , то codeро ба файли иҷрошаванда табдил диҳед, ки ягон насби иловагӣ талаб намекунад. Дар ин мақола, мо ба як равиши хеле содда тамаркуз хоҳем кард, ки барои ҳама гуна барномаҳо кор мекунад, новобаста аз он ки шумо кадом вобастагиҳоро дохил мекунед ё кадом хусусиятҳои JVM-ро истифода мебаред. Рамзе, ки имрӯз баррасӣ мешавад, дар анбори GitHub пайдо мешавад ва файлҳои иҷрошаванда бо барнома дар ин ҷо ҷойгир шудаанд .

Стек истифода бурда мешавад

Java 9+

java --version jlink --version

Мавен

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-ро ба файли мустақor 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> <executions> <phase>pace</phase> <goals> <goal> соя</goal> </goals> <configuration> <transformers> <transformer application="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>example.Main</Main- Синф> <Сохта-Рақами>1.0</Сохта-Рақами> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </лоиҳа>
Дар ин ҷо плагини "соя" аз ҷумла 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 лозим нест, аз ин рӯ дохил кардани онҳо ба рамзи шумо зиёдатӣ хоҳад буд. Бо jlink шумо метавонед JRE эҷод кунед, ки модули java.desktop- ро умуман дар бар намегирад . Ин система беҳтар кор мекунад, агар замимаи шумо ва ҳамаи вобастагии он файлҳои тартибдодашудаи module-info.java -ро дар бар гиранд , ки ба jlink маҳз кадом модулҳоро дохил кардан мехоҳед. Шумо инчунин метавонед бо истифода аз jdeps рӯйхати модулҳои лозимиро дастӣ муайян кунед . Ва ҳатто бидуни лоиҳаи модулӣ, мо метавонем насби Java-и худро ба таври муассир бо истифода аз jlink ба директория клон кунем.
jlink --add-modules ALL-MODULE-PATH --баромад сохтани/вақти кор
Дохил кардани ҳар як модул ба таври инфиродӣ кафолат медиҳад, ки китобхонаҳо ба монанди org.apache.commons/commons-text мувофиқи пешбинишуда кор мекунанд. Мо танҳо бояд муайян кунем, ки кадом модулҳо ба мо лозиманд.

Қадами 3: Jar ва JRE-ро ба файли иҷрошаванда муттаҳид кунед

Доштани файли jar, ки дорои рамз ва ҳама вобастагии он ва инчунин JRE аст, танҳо якҷоя кардани онҳо боқӣ мемонад. Барои ин мо бояд корҳои зеринро иҷро кунем:
  1. Феҳристи дорои JRE ва зарфи замимаатонро зер кунед.
  2. Скрипти ноустуворро ба болои ин файли ZIP замима кунед, ки он маълумотро ба директорияи муваққатӣ истихроҷ мекунад ва codeро иҷро мекунад.
Барои ин китобхонаи JavaScript мавҷуд аст, ки caxa ном дорад . Ҳадафи он табдил додани лоиҳаҳои NodeJS ба файлҳои иҷрошаванда аст ва он инчунин метавонад ҳама гуна насби NodeJS-ро дар система баста кунад. Хушбахтона, шумо метавонед ин қадамро бо нишон додани флаги --no-include-node гузаред .
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1,0 .jar"
Ин як файли иҷрошаванда бо номи "application" эҷод мекунад. Агар шумо онро барои Windows эҷод кунед, пас шумо бояд "application.exe" -ро муайян кунед. Вақте ки файли иҷрошаванда иҷро мешавад, {{caxa}} бо директорияи муваққатӣ, ки дар он файли zip ҷойгир карда шудааст, иваз карда мешавад. Лутфан таваҷҷӯҳ намоед, ки ҳангоми эҷоди файлҳои иҷрошаванда механизмҳо ба монанди имзои code ва навсозии автоматӣ низ истифода мешаванд. Аммо, ин чизҳо омӯзиши амиқро талаб мекунанд, ки дар як нашрия ҷойгир кардан душвор аст.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION