Сарчашма: Mccue.dev Имрӯз шумо мефаҳмед, ки чӣ тавр сохтани файли иҷрошавандаи EXE аз барномаи Java барои кор дар системаи оператсионии Windows. Ду маротиба клик кардан барои оғоз кардан яке аз роҳҳои осонтарини кушодани барнома мебошад. Агар шахсе, ки шумо мехоҳед барномаи худро нишон диҳед, аллакай 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);
}
}
Ҳадафи мо ҳоло ин аст, ки 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 аст, танҳо якҷоя кардани онҳо боқӣ мемонад. Барои ин мо бояд корҳои зеринро иҷро кунем:- Феҳристи дорои JRE ва зарфи замимаатонро зер кунед.
- Скрипти ноустуворро ба болои ин файли ZIP замима кунед, ки он маълумотро ба директорияи муваққатӣ истихроҷ мекунад ва codeро иҷро мекунад.
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 ва навсозии автоматӣ низ истифода мешаванд. Аммо, ин чизҳо омӯзиши амиқро талаб мекунанд, ки дар як нашрия ҷойгир кардан душвор аст.
GO TO FULL VERSION