在 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
我花了很多时间想弄清楚:
- 如果我创建一个 shell 脚本到 运行 一个 java -jar foo.jar 命令,它最终会出现在 /snap 目录中,但它不在用户路径中所以他们无法得到它
- 我已经尝试创建启动器,但总是收到无法找到我的启动器的错误,如果我将它放在我的根文件夹中 /bin/launch.sh snap 找不到它,如果我把它放在 snap/bin/ 文件夹中 我也遇到错误,不能把东西放在 snap 文件夹中
- 当我安装 snap 时,我看不到它把我要执行的 jar 放在哪里,所以我无法编写执行该操作的脚本
如果有人可以与启动器共享 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 目录中
我有一个使用 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
我花了很多时间想弄清楚:
- 如果我创建一个 shell 脚本到 运行 一个 java -jar foo.jar 命令,它最终会出现在 /snap 目录中,但它不在用户路径中所以他们无法得到它
- 我已经尝试创建启动器,但总是收到无法找到我的启动器的错误,如果我将它放在我的根文件夹中 /bin/launch.sh snap 找不到它,如果我把它放在 snap/bin/ 文件夹中 我也遇到错误,不能把东西放在 snap 文件夹中
- 当我安装 snap 时,我看不到它把我要执行的 jar 放在哪里,所以我无法编写执行该操作的脚本
如果有人可以与启动器共享 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 目录中