JavaRush /مدونة جافا /Random-AR /استراحة القهوة رقم 148. كيفية تحويل أي برنامج جافا إلى مل...

استراحة القهوة رقم 148. كيفية تحويل أي برنامج جافا إلى ملف EXE مستقل

نشرت في المجموعة
المصدر: Mccue.dev ستتعلم اليوم كيفية إنشاء ملف EXE قابل للتنفيذ من برنامج Java لتشغيله على نظام التشغيل Windows. استراحة القهوة رقم 148.  كيفية تحويل أي برنامج Java إلى ملف EXE مستقل - 1يعد النقر المزدوج لبدء التشغيل إحدى أسهل الطرق لفتح البرنامج. إذا كان الشخص الذي تريد عرض تطبيقك عليه لديه بالفعل الإصدار الصحيح من Java مثبتًا، فيمكنه النقر نقرًا مزدوجًا فوق ملف jar لتشغيله. إذا لم يكن Java مثبتًا عليه، فهناك طرق لإنشاء مثبت قابل للتنفيذ، مثل jpackage . بعد ذلك، لتشغيل الكود، ما عليك سوى النقر على هذا المثبت. يمكنك أيضًا استخدام Native Image لتحويل الكود إلى ملف قابل للتنفيذ ولا يتطلب أي تثبيت إضافي. في هذه المقالة، سنركز على نهج بسيط إلى حد ما يناسب أي تطبيق، بغض النظر عن التبعيات التي تقوم بتضمينها أو ميزات JVM التي تستخدمها. يمكن العثور على الكود الذي سيتم مناقشته اليوم في مستودع GitHub ، ويتم نشر الملفات القابلة للتنفيذ مع البرنامج هنا .

المكدس المستخدم

جافا 9+

جافا - الإصدار jlink - الإصدار

مخضرم

ام فين --النسخة

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 إلى ملف 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> <dependency> <dependency> <groupId> org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>1.9</version> </dependency> </dependeency> <build> <plugins> <plugin> <groupId>org.apache .maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal> الظل</goal> </goals> <configuration> <transformers> <transformer Implement="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> </مشروع>
هنا سيتعامل المكون الإضافي "shade" مع تضمين التعليمات البرمجية من جميع التبعيات الخاصة بك في الجرة. في هذه الحالة، التبعية الخارجية الوحيدة هي org.apache.commons/commons-text .
حزمة mvn النظيفة
سنقوم بعد ذلك بنقل ملف الجرة هذا إلى دليل /هدف جديد حيث سيتم فصله عن الملفات الأخرى.
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 --output build/runtime
يضمن تضمين كل وحدة على حدة أن المكتبات مثل org.apache.commons/commons-text ستعمل على النحو المنشود. نحتاج فقط إلى معرفة الوحدات التي نحتاجها.

الخطوة 3: دمج Jar وJRE في ملف قابل للتنفيذ

وجود ملف jar يحتوي على الكود وجميع تبعياته، بالإضافة إلى JRE، كل ما تبقى هو الجمع بينهما. للقيام بذلك نحتاج إلى القيام بما يلي:
  1. قم بضغط الدليل الذي يحتوي على JRE وجرة التطبيق الخاص بك.
  2. قم بإرفاق برنامج نصي في الجزء العلوي من هذا الملف المضغوط، والذي سيستخرج البيانات إلى دليل مؤقت ويقوم بتشغيل التعليمات البرمجية.
توجد مكتبة جافا سكريبت لهذا الغرض تسمى caxa . والغرض منه هو تحويل مشاريع NodeJS إلى ملفات تنفيذية، ويمكنه أيضًا تجميع أي تثبيتات NodeJS على النظام. لحسن الحظ، يمكنك تخطي هذه الخطوة عن طريق تحديد علامة --no-include-node .
npx caxa \ --input build \ --output application \ --no-include-node \ -- ​​​​"{{caxa}}/runtime/bin/java" "-jar" "{{caxa}}/javaexe -1.0 .جرة"
سيؤدي هذا إلى إنشاء ملف قابل للتنفيذ يسمى "التطبيق". إذا كنت تقوم بإنشائه لنظام التشغيل Windows، فأنت بحاجة إلى تحديد "application.exe". عند تشغيل الملف القابل للتنفيذ، سيتم استبدال {{caxa}} بالدليل المؤقت حيث تم نشر الملف المضغوط. يرجى ملاحظة أنه عند إنشاء ملفات قابلة للتنفيذ، يتم أيضًا استخدام آليات مثل توقيع التعليمات البرمجية والتحديثات التلقائية. ومع ذلك، فإن هذه الأمور تتطلب دراسة أعمق، وهو أمر يصعب دمجه في منشور واحد.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION