JavaRush /בלוג Java /Random-HE /הפסקת קפה מס' 148. כיצד להפוך כל תוכנת Java לקובץ EXE עצמ...

הפסקת קפה מס' 148. כיצד להפוך כל תוכנת Java לקובץ EXE עצמאי

פורסם בקבוצה
מקור: Mccue.dev היום תלמד כיצד ליצור קובץ EXE בר הפעלה מתוכנת Java להפעלה על מערכת ההפעלה Windows. הפסקת קפה מס' 148.  כיצד להפוך כל תוכנת Java לקובץ EXE עצמאי - 1לחיצה כפולה להפעלה היא אחת הדרכים הקלות ביותר לפתוח תוכנית. אם לאדם שאליו ברצונך להציג את היישום שלך כבר מותקנת הגרסה הנכונה של Java, הוא יכול ללחוץ פעמיים על קובץ ה-jar כדי להפעיל אותו. אם לא מותקן בו Java, יש דרכים ליצור מתקין הפעלה, כגון jpackage . לאחר מכן, כדי להפעיל את הקוד אתה רק צריך ללחוץ על מתקין זה. אתה יכול גם להשתמש ב-Native Image כדי להפוך את הקוד לקובץ הפעלה שאינו דורש התקנה נוספת. במאמר זה, נתמקד בגישה פשוטה למדי שעובדת עבור כל יישום, לא משנה באילו תלות אתה כולל או באילו תכונות JVM אתה משתמש. את הקוד שיידון היום ניתן למצוא במאגר GitHub , וקובצי ההפעלה עם התוכנית מתפרסמים כאן .

ערימה בשימוש

Java 9+

java --גרסה jlink --גרסה

מייבן

mvn --גרסה

NodeJS

npx --גרסה

שלב 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המטרה שלנו כעת היא לארוז את הקוד יחד עם התלות שלו לתוך צנצנת. קובצי 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>example</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 implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>example.Main</Main- Class> <Build-Number>1.0</Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
כאן התוסף "צל" יטפל בשילוב קוד מכל התלות שלך לתוך הצנצנת. במקרה זה, התלות החיצונית היחידה היא org.apache.commons/commons-text .
חבילה נקייה של mvn
לאחר מכן נעביר את קובץ ה-jar אל יעד/ ספריה חדשה שם הוא יופרד מקבצים אחרים.
mkdir build mv target/javaexe-1.0.jar build

שלב 2: צור סביבת ריצה של Java (JRE)

כדי להפעיל את קובץ ה-jar שכבר יצרנו, עלינו לקשר אותו עם סביבת זמן הריצה של Java. לשם כך נשתמש ב-jlink . מכיוון שהמערכת האקולוגית של Java לא משתמשת במודולים, כנראה שלא שמעתם עליהם או השתמשתם ב-jlink. בקיצור, jlink יכול ליצור "תמונות הפעלה מותאמות אישית". לדוגמה, אתה יוצר שרת אינטרנט. אתה לא צריך 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. צרף סקריפט stub לראש קובץ ה-zip הזה, שיחלץ את הנתונים לספרייה זמנית ויריץ את הקוד.
יש ספריית JavaScript עבור זה בשם caxa . מטרתו היא להפוך פרויקטים של NodeJS לקובצי הפעלה, והוא יכול גם לאגד כל התקנות NodeJS במערכת. למרבה המזל, אתה יכול לדלג על שלב זה על ידי ציון הדגל --no-include-node .
npx caxa \ --input build \ --יישום פלט \ --no-include-node \ -- ​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .jar"
פעולה זו תיצור קובץ הפעלה בשם "יישום". אם אתה יוצר אותו עבור Windows, עליך לציין "application.exe". כאשר קובץ ההפעלה פועל, {{caxa}} יוחלף בספרייה הזמנית שבה נפרס קובץ ה-zip. שימו לב כי בעת יצירת קבצי הפעלה, נעשה שימוש גם במנגנונים כגון חתימת קוד ועדכונים אוטומטיים. אולם דברים אלו דורשים עיון מעמיק יותר, שקשה להשתלב בפרסום אחד.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION