JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 148. Islendik Java programmasyny özbaşd...

Kofe arakesmesi # 148. Islendik Java programmasyny özbaşdak EXE faýlyna nädip öwürmeli

Toparda çap edildi
Ç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. Kofe arakesmesi # 148.  Islendik Java programmasyny özbaşdak EXE faýlyna nädip öwürmeli - 1Baş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);
    }
}
Kofe arakesmesi # 148.  Islendik Java programmasyny özbaşdak EXE faýlyna nädip öwürmeli - 2Indi 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:
  1. Arzaňyzyň JRE we bankasyny öz içine alýan katalogy zip ediň.
  2. Maglumatlary wagtlaýyn kataloga çykarjak we kody işletjek bu zip faýlyň ýokarsyna stub skriptini dakyň.
Caxa diýilýän JavaScript kitaphanasy bar . Maksady, NodeJS taslamalaryny ýerine ýetirip boljak ýerine öwürmek, şeýle hem ulgamdaky islendik NodeJS gurnamalaryny birikdirip biler. Bagtymyza, --no-include-node baýdagyny görkezip, bu ädimden geçip bilersiňiz .
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.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION