问题描述
我有一个使用java.awt Swing UI的基本Java应用程序,我想为其创建一个管理单元,因此在安装时有可用的启动器,并且UI会启动。我使用gradle和jar任务创建了一个运行良好的jar。
自然地,我有一个类,当调用该类时,它可以很好地加载我的应用程序:
package com.foo
class Bar() {
static void main(String... args) { launchUI() }
}
我在项目的根目录下创建了一个snap文件夹,并在其中按照https://snapcraft.io/docs/java-applications上的说明创建了一个snap.yaml,所以我有一个可以生成也可以很好安装的snap文件的snap yaml:
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命令的shell脚本,它最终会位于/ snap目录中,但是它不在用户路径上,因此他们无法进入
- 我尝试创建启动器,但是如果我将其放在根文件夹中(因为/bin/launch.sh snap找不到并放入),总是会出现找不到启动器的错误在snap / bin /文件夹中,我也遇到错误,无法将其放置在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目录中