在 ubuntu 上使用 swing ui 的 java 应用的 snapscraft snap.yaml

snapscraft snap.yaml for java apps using swing ui on ubuntu

我有一个使用 java.awt Swing UI 的基本 java 应用程序,我想为它创建一个 snap,以便在安装它时有一个可用的启动器和我的 UI 启动。我使用 gradle 和 jar 任务来创建一个工作正常的 jar。

自然地,我有一个 class,当被调用时加载我的应用程序就好了:

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

我在项目的根目录创建了一个 snap 文件夹,并在其中按照 https://snapcraft.io/docs/java-applications 上的说明创建了一个 snap.yaml,所以我有一个 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 程序的工作 snap.yaml,并且如果提到了您注意到这些文件所在位置的路径,我将不胜感激关于 /snap/snap.yaml 文件的路径

好的,我明白了——文档没有这么说,但文件是相对于项目的根目录的,所以即使 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 目录中