Çeşme: Mccue.dev Bu gün Windows operasiýa ulgamynda işlemek üçin Java programmasyndan ýerine ýetirip bolýan EXE faýly nädip döretmelidigini öwrenersiňiz. Başlamak üçin iki gezek basmak, programma açmagyň iň aňsat usullaryndan biridir. Arzaňyzy görkezmek isleýän adamyňyzda Java-yň dogry wersiýasy bar bolsa, ony işletmek üçin banka faýlyna iki gezek basyp bilersiňiz. Java gurulmadyk bolsa, jpackage ýaly ýerine ýetirip bolýan gurnawçy döretmegiň ýollary bar . Ondan soň, kody işletmek üçin diňe şu gurnaýja basmaly. Şeýle hem , kody goşmaça gurnama talap etmeýän ýerine ýetirilýän faýla öwürmek üçin Native Image ulanyp bilersiňiz . Bu makalada, haýsy garaşlylygy goşsaňyz ýa-da haýsy JVM aýratynlyklaryny ulansaňyz, islendik programma üçin işleýän gaty ýönekeý çemeleşmä ünsi jemläris. Şu gün ara alnyp maslahatlaşyljak kody GitHub ammaryndan tapyp bilersiňiz we programma bilen ýerine ýetirip boljak faýllar şu ýerde ýerleşdirildi .
Ulanylan stak
Java 9+
java - öwrülişik jlink - öwrülişik
Maven
mvn - öwrülişik
NodeJS
npx - öwrülişik
1-nji ädim: Kody düzüň we bankanyň içine gaplaň
Bu esasy programma, interfeýsdäki düwmeleriň birine basyp üýtgedip boljak tekst bilen ýönekeý penjire döreder.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);
}
}
Indi maksadymyz, garaşlylygy bilen birlikde kody gaplamak. JAR faýllary az goşmaça gurluşy bolan adaty ZIP arhiwidir. Maven taslamasy üçin konfigurasiýa şeýle bolar.
<? xml wersiýasy = "1.0" kodlamak = "UTF-8"?> <taslama xmlns = "http://maven.apache.org/POM/4.0.0" xmlns: xsi = "http: //www.w3 .org / 2001 / XMLSchema-mysal "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> mysal </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> <baglylyk> <baglylyk> org.apache.commons </groupId> <artifactId> umumy tekst </artifactId> <version> 1.9 </version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId> org.apache .maven.plugins </groupId> <artifactId> maven-shadow-plugin </artifactId> <version> 2.4.3 </version> <ýerine ýetiriş> <ýerine ýetiriş> kölege </goal> </goals> <configuration> <transformers> <transformator ýerine ýetiriş = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class> mysal.Main </ Main- Synp> <Build-Number> 1.0 </Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </excution> </executions> </plugin> </plugins> </build> </project>
Bu ýerde “kölegeli” plugin, ähli garaşlylyklaryňyzdan banka kody goşmak bilen işleýär. Bu ýagdaýda ýeke-täk daşarky garaşlylyk org.apache.commons / commons-text .
mvn arassa paket
Soňra bu banka faýlyny beýleki faýllardan bölünjek täze maksat / kataloga geçireris .
mkdir mv maksat / javaexe-1.0.jar gurmak
2-nji ädim: Java iş wagty gurşawyny dörediň (JRE)
Öň döreden banka faýlymyzy işletmek üçin ony Java iş wagty bilen baglanyşdyrmalydyrys. Munuň üçin jlink ulanarys . Java ekosistemasy modullary ulanmaýandygy sebäpli, belki eşitmediňiz ýa-da jlink ulanmadyňyz. Gysgaça aýdylanda, jlink “ýerine ýetirip bolýan şekilleri” döredip biler. Mysal üçin, web serweri ýasaýarsyňyz. Size AWT ýa-da Swing gerek däl, şonuň üçin olary koduňyza goşmak artykmaç bolar. Jlink bilen java.desktop modulyny öz içine almaýan JRE döredip bilersiňiz . Programmaňyz we oňa bagly bolanlar, haýsy modullary goşmak isleýändigiňizi anyk görkezýän düzülen module-info.java faýllaryny öz içine alsa, bu ulgam iň oňat işleýär. Şeýle hem , jdeps ulanyp, zerur modullaryň sanawyny el bilen kesgitläp bilersiňiz . Hatda modully taslama bolmasa-da, Java gurnamagy jlink ulanyp kataloga netijeli klonlaşdyryp bileris.
jlink --add-modullar HEMMESI-MODUL-PATH - çykyş gurmak / iş wagty
Her moduly aýratynlykda org.apache.commons / commons-text ýaly kitaphanalaryň niýetlenilişi ýaly işlemegini üpjün edýär. Diňe haýsy modullaryň gerekdigini anyklamaly.
3-nji ädim: Jar we JRE-ni ýerine ýetirip boljak ýerine birleşdiriň
Kod we oňa baglylyklary, şeýle hem JRE-ni öz içine alýan banka faýly bolmak, galan zatlary birleşdirmek. Munuň üçin aşakdakylary etmeli:- Arzaňyzyň JRE we bankasyny öz içine alýan katalogy zip ediň.
- Maglumatlary wagtlaýyn kataloga çykarjak we kody işletjek bu zip faýlyň ýokarsyna stub skriptini dakyň.
npx caxa \ - giriş gurmak \ - çykyş programmasy \ --no-include-node \ - "{{caxa}} / iş wagty / bin / java" "-jar" "{{caxa}} / javaexe -1.0 .jar "
Bu, “programma” atly ýerine ýetirip boljak faýl döreder. Windows üçin döredýän bolsaňyz, “application.exe” -ni görkezmeli. Executerine ýetirip bolýan mahaly, {{caxa} z zip faýly ýerleşdirilen wagtlaýyn katalog bilen çalşyrylar. Executerine ýetirip boljak faýllar döredilende kodlara gol çekmek we awtomatiki täzelenmeler ýaly mehanizmleriň hem ulanylýandygyny ýadyňyzdan çykarmaň. Şeýle-de bolsa, bu zatlar has çuňňur öwrenilmegini talap edýär, bu bir neşirde ýerleşdirilmegi kyn.
GO TO FULL VERSION