我有一个使用java.awt Swing UI的基本java应用程序,我想为它创建一个快照,这样当它安装好时,就有一个可用的启动器,我的UI就会启动。我使用gradle和jar任务来创建一个运行良好的jar。
自然,我有一个类,当调用时加载我的应用程序很好:
package com.foo
class Bar() {
static void main(String... args) { launchUI() }
}
我在项目的根目录下创建了一个快照文件夹,并在其中按照https://snapcraft.io/docs/java-applications所以我有一个生成快照文件的snapyaml,它也安装得很好:
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命令,它最终会出现在/snapp目录中,但它不在用户路径上,所以他们无法访问它
- 我尝试过创建启动器,但总是收到一个错误,即找不到我的启动器,如果我把它放在我的根文件夹中作为/bin/launch.sh,snap找不到它,如果我放在snap/bin/文件夹中,我也会收到不把东西放在snap文件夹中的错误
- 当我安装快照时,我看不到它把我想执行的jar放在哪里,所以我不能写这样的脚本
如果有人能与启动器共享java程序的工作snap.yaml,如果有人提到某个文件的路径,请注意这些文件与/snap/snap.yaml文件的路径的关系
ok弄清楚了-文档没有这么说,但文件是相对于项目的根的,所以即使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目录中