سؤال

أنا أكتب تطبيقًا بلغة Java لسطح المكتب باستخدام مكتبة Eclipse SWT لعرض واجهة المستخدم الرسومية.أعتقد أن SWT يساعد Java في التغلب على أكبر عقبة أمام القبول على سطح المكتب:وهي توفير تطبيق Java بواجهة متسقة وسريعة الاستجابة تشبه تلك التي تنتمي إلى أي تطبيق آخر على سطح المكتب.ومع ذلك، أشعر أن تعبئة التطبيق لا تزال مشكلة.

يوفر نظام التشغيل OS X في الأصل آلية سهلة لتغليف تطبيقات Java في حزم التطبيقات الأصلية، ولكن إنتاج تطبيق لنظام التشغيل Windows/Linux لا يتطلب من المستخدم تشغيل ملف دفعي قبيح أو النقر فوق ملف ‎.jar لا يزال يمثل مشكلة.من المحتمل أن هذه ليست مشكلة في نظام التشغيل Linux، حيث من المرجح أن يكون المستخدم أكثر ذكاءً في التكنولوجيا، ولكن في نظام التشغيل Windows، أرغب في الحصول على ملف .exe عادي لتشغيله.

هل كان لدى أي شخص أي خبرة في استخدام أي من أدوات إنشاء .exe لـ Java الموجودة هناك؟لقد قمت بتجريب JSmooth ولكن واجهت مشكلات مختلفة معه.هل هناك حل أفضل قبل أن أقوم بإخراج Visual Studio وتشغيل حل خاص بي؟

يحرر: ربما يجب أن أذكر أنني غير قادر على إنفاق الكثير من المال على حل تجاري.

هل كانت مفيدة؟

المحلول

لمتابعة إجابة pauxu، أستخدم Launch4j وNSIS في مشروع خاص بي واعتقدت أنه سيكون من المفيد إظهار كيفية استخدامي لهما.إليك ما أفعله لنظام التشغيل Windows.راجع للشغل، أنا أقوم بإنشاء .app و .dmg لنظام التشغيل Mac، ولكنني لم أكتشف ما يجب فعله لنظام التشغيل Linux حتى الآن.

نسخ المشروع من Launch4j وNSIS

لدي في مشروعي دليل "البائع" وتحته يوجد دليل لـ "launch4j" و"nsis".يوجد داخل كل منها نسخة من التثبيت لكل تطبيق.أجد أنه من الأسهل الحصول على نسخة محلية للمشروع بدلاً من إجبار الآخرين على تثبيت كلا المنتجين وإعداد نوع من متغيرات البيئة للإشارة إلى كل منهما.

ملفات البرنامج النصي

لدي أيضًا دليل "برامج نصية" في مشروعي يحتوي على ملفات تكوين/برامج نصية متنوعة لمشروعي.أولاً يوجد ملف Launch4j.xml:

<launch4jConfig>
  <dontWrapJar>true</dontWrapJar>
  <headerType>gui</headerType>
  <jar>rpgam.jar</jar>
  <outfile>rpgam.exe</outfile>
  <errTitle></errTitle>
  <cmdLine></cmdLine>
  <chdir>.</chdir>
  <priority>normal</priority>
  <downloadUrl>http://www.rpgaudiomixer.com/</downloadUrl>
  <supportUrl></supportUrl>
  <customProcName>false</customProcName>
  <stayAlive>false</stayAlive>
  <manifest></manifest>
  <icon></icon>
  <jre>
    <path></path>
    <minVersion>1.5.0</minVersion>
    <maxVersion></maxVersion>
    <jdkPreference>preferJre</jdkPreference>
  </jre>
  <splash>
    <file>..\images\splash.bmp</file>
    <waitForWindow>true</waitForWindow>
    <timeout>60</timeout>
    <timeoutErr>true</timeoutErr>
  </splash>
</launch4jConfig>

ثم هناك البرنامج النصي NSIS rpgam-setup.nsis.يمكن أن يستغرق الأمر وسيطة VERSION للمساعدة في تسمية الملف.

; The name of the installer
Name "RPG Audio Mixer"

!ifndef VERSION
    !define VERSION A.B.C
!endif

; The file to write
outfile "..\dist\installers\windows\rpgam-${VERSION}.exe"

; The default installation directory
InstallDir "$PROGRAMFILES\RPG Audio Mixer"

; Registry key to check for directory (so if you install again, it will 
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\RPG_Audio_Mixer" "Install_Dir"

# create a default section.
section "RPG Audio Mixer"

    SectionIn RO

    ; Set output path to the installation directory.
    SetOutPath $INSTDIR
    File /r "..\dist\layout\windows\"

    ; Write the installation path into the registry
    WriteRegStr HKLM SOFTWARE\RPG_Audio_Mixer "Install_Dir" "$INSTDIR"

    ; Write the uninstall keys for Windows
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "DisplayName" "RPG Audio Mixer"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "UninstallString" '"$INSTDIR\uninstall.exe"'
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoModify" 1
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoRepair" 1
    WriteUninstaller "uninstall.exe"

    ; read the value from the registry into the $0 register
    ;readRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion

    ; print the results in a popup message box
    ;messageBox MB_OK "version: $0"

sectionEnd

Section "Start Menu Shortcuts"
  CreateDirectory "$SMPROGRAMS\RPG Audio Mixer"
  CreateShortCut "$SMPROGRAMS\RPG Audio Mixer\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
  CreateShortCut "$SMPROGRAMS\RPG AUdio Mixer\RPG Audio Mixer.lnk" "$INSTDIR\rpgam.exe" "" "$INSTDIR\rpgam.exe" 0
SectionEnd

Section "Uninstall"

    ; Remove registry keys
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer"
    DeleteRegKey HKLM SOFTWARE\RPG_Audio_Mixer

    ; Remove files and uninstaller
    Delete $INSTDIR\rpgam.exe
    Delete $INSTDIR\uninstall.exe

    ; Remove shortcuts, if any
    Delete "$SMPROGRAMS\RPG Audio Mixer\*.*"

    ; Remove directories used
    RMDir "$SMPROGRAMS\RPG Audio Mixer"
    RMDir "$INSTDIR"

SectionEnd

التكامل النمل

لدي بعض الأهداف في ملف بناء Ant الخاص بي (build.xml) للتعامل مع ما ورد أعلاه.أولاً أطلب من Ant استيراد مهام Ant الخاصة بـ Launch4j:

<property name="launch4j.dir" location="vendor/launch4j" />
<taskdef name="launch4j" 
    classname="net.sf.launch4j.ant.Launch4jTask"
    classpath="${launch4j.dir}/launch4j.jar:${launch4j.dir}/lib/xstream.jar" />

لدي بعد ذلك هدف بسيط لإنشاء الغلاف القابل للتنفيذ:

<target name="executable-windows" depends="jar" description="Create Windows executable (EXE)">
    <launch4j configFile="scripts/launch4j.xml" outfile="${exeFile}" />
</target>

وهدف آخر لصنع المثبت:

<target name="installer-windows" depends="executable-windows" description="Create the installer for Windows (EXE)">
    <!-- Lay out files needed for building the installer -->
    <mkdir dir="${windowsLayoutDirectory}" />
    <copy file="${jarFile}" todir="${windowsLayoutDirectory}" />
    <copy todir="${windowsLayoutDirectory}/lib">
        <fileset dir="${libraryDirectory}" />
        <fileset dir="${windowsLibraryDirectory}" />
    </copy>
    <copy todir="${windowsLayoutDirectory}/icons">
         <fileset dir="${iconsDirectory}" />
    </copy>
    <copy todir="${windowsLayoutDirectory}" file="${exeFile}" />

    <mkdir dir="${windowsInstallerDirectory}" />

    <!-- Build the installer using NSIS -->
    <exec executable="vendor/nsis/makensis.exe">
        <arg value="/DVERSION=${version}" />
        <arg value="scripts/rpgam-setup.nsi" />
    </exec>
</target>

يقوم الجزء العلوي منه فقط بنسخ الملفات الضرورية للمثبت إلى موقع مؤقت بينما يقوم النصف الثاني بتنفيذ البرنامج النصي الذي يستخدمه بالكامل لإنشاء المثبت.

نصائح أخرى

في شركتي نستخدمها Launch4J لإنشاء ملف exe، و NSIS لإنشاء المثبت، مع تطبيقات SWT.

لقد استخدمناه لسنوات في العديد من التطبيقات التجارية ويعمل الزوج بشكل جيد.

ربما يجب عليك إلقاء نظرة على IzPack.لقد قمت بإنشاء برنامج تثبيت رائع جدًا منذ عدة سنوات وأراهن أنهم ما زالوا يقومون بتحسينه.فهو يسمح بتثبيت المستندات والثنائيات والرابط القابل للنقر لبدء التطبيق IIRC.

لقد استخدمت مجانا Launch4J لإنشاء مشغل مخصص لبرامج Java الخاصة بي على Windows.جنبا إلى جنب مع الحرة مثبت NSIS يمكنك إنشاء حزمة لطيفة لمستخدمي Windows لديك.

يحرر: لم أرى أنك تستخدم سبحانه وتعالى.لا أعرف ما إذا كان يعمل مع SWT أيضًا، لأنني استخدمت Swing فقط في تطبيقاتي.

هل فكرت في كتابة برنامج صغير بلغة C/C++ يستدعي فقط CreateProcess لبدء تشغيل Java VM باستخدام ملف الجرة (أو الفئة)؟

يمكن أن تحصل فيجوال سي++ اكسبريس وقم بتجميع برنامج بدء التشغيل بسهولة تامة.وهذا من شأنه أن يجعل من السهل إضافة رمز ودود أيضًا.

فكر في تحويل تطبيقك إلى كسوف RCP.هو مكتوب في سبحانه وتعالى, ويحتوي Eclipse IDE على أدوات التعبئة والتغليف التي تنشئ ملفات تنفيذية لجميع الأنظمة الأساسية الرئيسية.بالنسبة لنظام التشغيل Windows، يمكنه إنشاء ملف مضغوط أو مجلد يحتوي على التعليمات البرمجية الخاصة بك.للحصول على تجربة تثبيت شائعة، سأستخدم NSIS.يوجد في الواقع أ مولد الحزم مشروع في Eclipse لإنشاء أدوات تثبيت مشتركة لجميع الأنظمة الأساسية التي يدعمها Eclipse.

هل فكرت في جافا ويب ستارت? هنا هو برنامج تعليمي مخصص لنشر تطبيق SWT باستخدام Java Web Start.

تثبيت4J.ليست مجانية، ولكنها تستحق العناء.إعطاء المحاكمة فرصة

يمكنك الآن القيام بذلك من خلال Netbeans!إنه أمر سهل حقًا ويعمل بشكل مثالي.الدفع هذا البرنامج التعليمي على موقع Netbeans.

لقد مررت بنفس الأمر ووجدت أن جميع الخيارات المجانية لم تكن جيدة جدًا.يبدو أنك ستكتب بنفسكسأكون مهتمًا بمعرفة ما إذا كان لدى شخص ما خيار مجاني/رخيص يعمل

خيار آخر كنت أفكر فيه:بدلاً من كتابة مشغل أصلي من الصفر، يأتي Eclipse مع الكود المصدري للمشغل الخاص به، وربما يمكن إعادة استخدام هذا لتطبيقي.

من المؤسف أن Sun لم تقم بتضمين أي شيء مماثل في JDK.

تصويت آخر لـ Launch4J، لقد كتبت للتو مهمة نملة هذا الصباح للتكامل مع أحد مشاريعي.يبدو أن العمل بشكل جيد حقا

لقد استخدمت JSmooth في الماضي، وما زلت محظوظًا به.واجهة المستخدم مليئة بالعربات التي تجرها الدواب، لكنني أستخدم ذلك فقط لإنشاء ملف التكوين مرة واحدة، ثم أقوم بالإنشاء من Ant بعد ذلك.

ما هي المشاكل التي تواجهها مع JSmooth؟

لقد عملت JSMooth بشكل جيد للغاية بالنسبة لنا في بيئة الإنتاج، حيث قمت أولاً بإنشاء جرة واحدة باستخدام جرة واحدة (مكون إضافي لجرة الدهون للكسوف) ثم لفتها باستخدام JSmooth.

(يرجى ملاحظة أنني أردت توزيعًا بدون تثبيت لملف واحد، مما قد يؤدي إلى تثبيت JRE إذا لزم الأمر).

لقد عملت بشكل جيد لدرجة أنني اعتقدت أن لا أحد يستخدمها :)

قد ترغب في تجربة أداتنا، برنامج BitRock InstallBuilder.على الرغم من أنه تطبيق أصلي، إلا أن الكثير من عملائنا يستخدمونه لحزم تطبيقات Java لسطح المكتب.إذا قمت بتجميع JRE وإنشاء مشغل، وما إلى ذلك.لا يحتاج المستخدم حتى إلى معرفة أنه يقوم بتثبيت تطبيق Java.إنها منصة مشتركة، لذا يمكنك إنشاء أدوات تثبيت لكل من Windows وMac (وLinux وSolaris وما إلى ذلك). مثل أداة install4j المذكورة في منشور آخر، فهي أداة تجارية، لكن لدينا تراخيص مجانية للمشاريع مفتوحة المصدر وخصومات خاصة لـ microISVs / الشركات الصغيرة، وما إلى ذلك.فقط أرسل لنا بريدًا إلكترونيًا.أردت أيضًا التأكيد على أن هذه أداة تثبيت، لذا فهي لن تلبي احتياجاتك إذا كنت تبحث فقط عن ملف واحد قابل للتنفيذ.

نستخدم في شركتي Launch4J وNSIS لتوزيع Windows، وjdeb لتوزيع Debian، وJava Web Start لنظام التشغيل العام.هذا يعمل بشكل جيد جدا.

أرجوك حاول InstallJammer.أفضل ما استخدمته على الإطلاق.مجاني وقوي.وكافي للاستخدام الشخصي والتجاري.

هل فكرت في المثبت المتقدم؟

لقد استخدمته عدة مرات خاصة لنظامي التشغيل Windows و Mac.لا البرمجة النصية أو النملة المطلوبة.كل واجهة المستخدم الرسومية.بسيطة جدا ومفهومة.ليست مجانية ولكنها تستحق كل بنس.

- لاوش كمسؤول
- ارتباط الملف
- سمات تثبيت مخصصة + سمات مدمجة
- الحزمة مع JRE
- تثبيت الموقع
- تنفيذ شاشة البداية الأصلية
- يمكنك إنشاء خدمات وأحداث التثبيت
- المتطلبات الأساسية
- الحد الأدنى لإصدار JRE والحد الأقصى للإصدار

والكثير.ولا تفهم الأمر بطريقة ملتوية، ليس لدي أي اتصالات مع الرجال... تطبيقهم رائع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top