Упаковочные приложения Java для рабочего стола Windows/Linux

Как отметил @FelixKling, наиболее вероятным сценарием является то, что узлы, которые вы ищете, еще не существуют.

Однако современные методы разработки часто могут манипулировать элементами документа за пределами дерева документов либо с DocumentFragments, либо просто отсоединением / повторным подключением текущих элементов напрямую. Такие методы могут использоваться как часть шаблонов JavaScript или для предотвращения чрезмерных операций перерисовки / переплавки, в то время как элементы, о которых идет речь, сильно изменяются.

Аналогично, новая функциональность «Теневой DOM» развертывается в современных браузерах позволяет элементам быть частью документа, но не обрабатываться запросом document.getElementById и всеми его методами sibling (querySelector и т. д.). Это делается для инкапсуляции функциональных возможностей и, в частности, скрыть его.

Опять же, скорее всего, элемент, который вы ищете, просто (пока) в документе, и вы должны сделать, как предлагает Феликс , Тем не менее, вы также должны знать, что это все чаще является не единственной причиной того, что элемент может быть необоснованным (временно или постоянно).

36
задан Jonik 26 April 2010 в 11:02
поделиться

15 ответов

Для следования ответу pauxu я использую launch4j и NSIS на моем проекте и думал, что будет полезно показать, как я использую их. Вот то, что я делаю для Windows. BTW, я создаю .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. Это может взять аргумент ВЕРСИИ, чтобы помочь назвать файл.

; 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

Интеграция муравья

У меня есть некоторые цели в моем файле типа "build" Муравья (build.xml) для обработки вышеупомянутого. Сначала я Муравей телефона для импорта задач 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>

Главная часть тот просто копии, необходимые файлы для установщика к временному местоположению и второй половине выполняют сценарий, который использует все это для создания установщика.

30
ответ дан Brian Kelly 27 November 2019 в 05:55
поделиться

JSMooth работал очень хорошо на нас в продуктивной среде, где я сначала генерировал единственную банку с помощью одной банки (толстый плагин банки для затмения) и затем обернул его с JSmooth.

(Обратите внимание на то, что я хотел распределение без установок единственного файла, который мог PROMT для установки JRE в случае необходимости).

Это работало так хорошо, что я думал, что никто не использовал его:)

0
ответ дан Thorbjørn Ravn Andersen 27 November 2019 в 05:55
поделиться

Можно хотеть попробовать наш инструмент, BitRock InstallBuilder. Хотя это - исходное приложение, много наших клиентов использует его для упаковки настольных JAVA-приложений. Если Вы связываете JRE и создаете средство запуска, и т.д. пользователь даже не должен знать, что они устанавливают JAVA-приложение. Это является кросс-платформенным, таким образом, можно генерировать установщики и для Windows и для Mac (и Linux, Солярис, и т.д.) Как install4j инструмент, упомянутый в другом сообщении, это - коммерческий инструмент, , но мы имеем бесплатные лицензии на проекты с открытым исходным кодом и специальные скидки для microISVs / малый бизнес, и т.д. просто отбрасываем нас электронное письмо. Также требуемый, чтобы подчеркнуть, что это - инструмент установщика, таким образом, он не обратится к Вашим потребностям, если Вы будете только искать единственный исполняемый файл файла.

0
ответ дан Daniel Lopez 27 November 2019 в 05:55
поделиться

Я использовал JSmooth в прошлом и все еще имею удачу с ним. UI довольно ошибочен, но я только использую это для создания файла конфигурации однажды, и затем я создаю из Муравья после этого.

, Какие проблемы Вы имеете с JSmooth?

0
ответ дан James Van Huis 27 November 2019 в 05:55
поделиться

Другая опция я рассматривал: вместо того, чтобы писать собственное средство запуска с нуля, Eclipse идет с исходным кодом для своего собственного средства запуска, и это могло, возможно, повторно ставиться целью для моего приложения.

Это - позор, что Sun никогда не включал ничего подобного в JDK.

0
ответ дан alexmcchessers 27 November 2019 в 05:55
поделиться

Я прошел то же и нашел, что все бесплатные опции не были очень хороши. Похож Вы будете писать свое собственное. Мне было бы интересно видеть, есть ли у кого-то свободная/дешевая опция, которая работает

0
ответ дан basszero 27 November 2019 в 05:55
поделиться

Другое голосование за Launch4J, просто записал задачу Ant этим утром для интеграции с одним из моих проектов. Кажется, работает действительно хорошо

0
ответ дан 27 November 2019 в 05:55
поделиться

Install4J. Не свободный, но стоящий того. Дайте пробной версии выстрел

1
ответ дан basszero 27 November 2019 в 05:55
поделиться

Вы думали [приблизительно 110], сеть Java Запускается ? Здесь учебное руководство специально для развертывания приложения SWT с сетью Java, Запускаются.

2
ответ дан Jason Day 27 November 2019 в 05:55
поделиться

Рассмотрите преобразование Вашего приложения к Eclipse RCP. Это записано в SWT, и Eclipse IDE содержит упаковочные инструменты, которые генерируют исполняемые файлы для всех основных платформ. Для окон это может генерировать zip или папку, содержащую Ваш код. Для общего опыта установки я был бы с помощью NSIS. Существует на самом деле генератор пакетов проект в затмении для создания общих установщиков для всех поддержек затмения платформ.

3
ответ дан Heath Borders 27 November 2019 в 05:55
поделиться

Вы рассмотрели запись небольшой программы в C/C++, который просто звонит CreateProcess для запуска Java VM с банкой (или класс) файл?

Вы могли получить Экспресс Visual C++ и соединить программу запуска довольно легко. Это облегчило бы добавлять дружественный значок также.

3
ответ дан Derek Park 27 November 2019 в 05:55
поделиться

Я использовал свободное Launch4J для создания пользовательского средства запуска для моих программ Java в Windows. Объединенный со свободным Установщик NSIS можно создать хороший пакет для пользователей Windows.

Редактирование: не видел, что Вы используете SWT. Не знайте, работает ли это с SWT также, потому что я использовал только Swing в своих приложениях.

4
ответ дан Johannes K. Lehnert 27 November 2019 в 05:55
поделиться

Возможно, необходимо смотреть на IzPack. Я создал очень хороший установщик несколько лет назад, и я держал пари, что они все еще улучшают его. Это позволяет установке документов, двоичных файлов и активируемой по щелчку ссылки запускать приложение IIRC .

7
ответ дан cringe 27 November 2019 в 05:55
поделиться

В моей компании мы используем Launch4J для создания EXE-файла, и NSIS для создания установщика, с приложениями SWT.

Мы использовали его в течение многих лет в нескольких коммерческом применении и прекрасных работах в паре.

10
ответ дан pauxu 27 November 2019 в 05:55
поделиться

В моей компании мы используем launch4J и NSIS для дистрибутива Windows, jdeb для дистрибутива Debian и Java Web Start для общей операционной системы. Это прекрасно работает.

0
ответ дан 27 November 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: