snapscraft snap.yaml для приложений Java с использованием swing ui на ubuntu

#java #ubuntu #snapcraft

#java #ubuntu #snapcraft

Вопрос:

У меня есть базовое java-приложение, использующее java.awt Swing UI, и я хочу создать для него привязку, чтобы при его установке была доступна панель запуска и запускался мой пользовательский интерфейс. Я использую gradle и задачу jar для создания jar, которая работает нормально.

Естественно, у меня есть класс, который при вызове отлично загружает мое приложение:

     package com.foo
    class Bar() {
         static void main(String... args) { launchUI() }
    }
  

Я создал папку snap в корне проекта и snap.yaml, где я следовал инструкциям по https://snapcraft.io/docs/java-applications итак, у меня есть snap yaml, который создает файл snap, который также устанавливается нормально:

 name: deepthought
base: core18  
version: '0.0.7'
summary: ""
icon: gui/foo.png
description: |
 Computes the ultimate answer for life the universe and everything

grade: devel # must be 'stable' to release into candidate/stable channels
confinement: devmode # use 'strict' once you have the right plugs and slots

# This doesn't work
#apps:
#  htmldoc:
#    command: desktop-launch $SNAP/bin/foo.sh
##    desktop: share/applications/htmldoc.desktop
#    plugs: [home, network, x11]
parts:
  foopart:
    plugin: gradle
    source: https://github.com/bsautner/foo.git
    source-type: git
    gradle-options: []   # suppress running of tests and run the war task
    gradle-output-dir: build/libs
  

Я потратил довольно много времени, пытаясь выяснить:

  • Если я создам сценарий оболочки для запуска java -jar foo.jar команда он попадает в каталог / snap, но его нет в пути пользователя, поэтому они не могут добраться до него
  • Я пытался создавать пусковые установки, но всегда получаю сообщение об ошибке, что моя пусковая установка не может быть найдена, если я помещу ее в свою корневую папку как /bin/launch.sh snap не может его найти, и если я помещаю его в папку snap / bin /, я также получаю ошибки, чтобы не помещать вещи в папку snap
  • Когда я устанавливаю свою оснастку, я не вижу, куда она помещает мой jar, который я хочу выполнить, поэтому я не могу написать скрипт, который это делает

Я был бы очень признателен, если бы кто-нибудь мог поделиться рабочим snap.yaml для java-программы с лаунчером, и если есть какое-либо упоминание о пути к чему-то, что вы отметили, где эти файлы находятся по отношению к пути к файлу / snap/ snap.yaml

Ответ №1:

хорошо понял это — в документах этого не сказано, но файлы относятся к корню проекта, поэтому, хотя yaml говорит, что это запуск

 apps:
  cmd3:
    command: usr/bin/foo.sh
  

foo.sh должно быть в корне проекта, и раздел orginize здесь перемещает его в каталог bin

   foo:
    plugin: gradle
    source-type: local
    source: .
    build-packages:
      - openjdk-11-jdk
    stage-packages:
      - openjdk-11-jdk
      - x11-utils
    organize:
      ${SNAPCRAFT_PART_BUILD}/jg-snap: usr/bin/foo.sh
  

Jar находится в каталоге /snap/foo/current/usr/jar