Как добавить ярлык в приложение Windows из jpackage + wix? - PullRequest
1 голос
/ 25 февраля 2020

Я получил скрипт (просто упрощенный отрывок для краткости), чтобы собрать и упаковать мое приложение, но он сводится к генерации установщика WiX с:

jpackage \
    --type msi \
    --dest "$(cygpath -w "${base[build:dist]}")" \
    --name "${appDisplayName}" \
    --app-version "${version}" \
    --app-image "$(cygpath -w "${base[build:app]}")" \
    --license-file "$(cygpath -w resources/app/legal/LICENSE)" \
    --vendor "${vendor}" \
    --verbose \
    --temp 'W:\_tmp_' \
    --win-shortcut;

С ошибкой enigmati c: Command [light.exe, (...)] in (...) exited with 94 code. Я обнаружил неразрешенную ссылку и, в частности, ссылку на ярлык: ...\config\bundle.wxf(10) : error LGHT0094 : Unresolved reference to symbol 'Icon:icon1798580986' in section 'Fragment:'.

Когда я исследовал сгенерированный WiX XML, я обнаружил следующее:

<?xml version="1.0" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Fragment>
  ...
  <DirectoryRef Id="DesktopFolder">
    <Component Win64="yes" Id="cshortcut9906e12cdacb303ebb5e48c888cf6949" Guid="{9906e12c-dacb-303e-bb5e-48c888cf6949}">
      ...
      <Shortcut Id="shortcut9906e12cdacb303ebb5e48c888cf6949" Name="..." WorkingDirectory="INSTALLDIR" Advertise="no" IconIndex="0" Target="[#filed2065cdc42e13
55f8bdbbefc93d540f3]" Icon="icon1798580986"></Shortcut>
    </Component>
  </DirectoryRef>
  ...
</Wix>

И действительно есть это значение «icon1798580986», которое мне ничего не говорит, и даже WiX теряется здесь (после прочтения этого { ссылка } я проверил и подтвердил, что у меня действительно WixUIExtension.dll в WiX bin папка).

Когда я удаляю опцию --win-shortcut, генерируется установщик MSI, но, к сожалению, без ярлыка на рабочем столе (у приложения есть соответствующие значки, как вы создали образ приложения с помощью --icon и --resource-dir, указывающие на значки приложений ao).

Как вы, наверное, догадались, это вызывается из Cygwin, поэтому иногда ему нужно поиграться с путями, особенно когда каждый вызывает Windows исполняемые файлы (отсюда эти cygpath вещи).

Ну, я не смог найти никаких конструктивных подходов, как просто позволить моему приложению Java, упакованному jpackage (из обоих JDK-14/1 5 советников безуспешно), чтобы иметь хороший ярлык после его установки. Кто-нибудь знает как это исправить? Заранее спасибо.

1 Ответ

1 голос
/ 04 марта 2020

это проще сделать с помощью подключаемого модуля Gradle

Вам необходимо установить правильный путь к файлу иконки и иметь действительный файл .ico. Вот как я это сделал:

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'PDF Decorator'
        jvmArgs = ['-Djdk.gtk.version=2'] // required due to a bug in Java: https://github.com/javafxports/openjdk-jfx/issues/175
    }
    jpackage {
        installerOptions = [
            '--description', project.description,
            '--copyright', 'Copyrigth 2015-2019 WALCZAK.IT'
        ]
        installerType = project.findProperty('installerType') // we will pass this from the command line (example: -PinstallerType=msi)
        if (installerType == 'msi') {
            imageOptions += ['--icon', 'src/main/resources/pdfdecorator/gui/icon.ico']
            installerOptions += [
                '--win-per-user-install', '--win-dir-chooser',
                '--win-menu', '--win-shortcut'
            ]
        }
        if (installerType == 'pkg') {
            imageOptions += ['--icon', 'src/main/resources/pdfdecorator/gui/icon.icns']
        }
        if (installerType in ['deb', 'rpm']) {
            imageOptions += ['--icon', 'src/main/resources/pdfdecorator/gui/icon_256x256.png']
            installerOptions += [
                '--linux-menu-group', 'Office',
                '--linux-shortcut'
            ]
        }
        if (installerType == 'deb') {
            installerOptions += [
                '--linux-deb-maintainer', 'office@walczak.it'
            ]
        }
        if (installerType == 'rpm') {
            installerOptions += [
                '--linux-rpm-license-type', 'GPLv3'
            ]
        }
    }
}

Вот статья о том, как создать образ приложения, используя OpenJDK 11 и используя OpenJDK 14 с jpackage только для сборки установщика / пакета: https://walczak.it/blog/distributing-javafx-desktop-applications-without-requiring-jvm-using-jlink-and-jpackage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...