如何将 Java 应用程序捆绑到 Gnome/Ubuntu 中的关联 .desktop 文件?

Posted

技术标签:

【中文标题】如何将 Java 应用程序捆绑到 Gnome/Ubuntu 中的关联 .desktop 文件?【英文标题】:How to bundle Java App to associated .desktop file in Gnome/Ubuntu? 【发布时间】:2020-06-13 03:05:33 【问题描述】:

抱歉,我还没有找到任何解决方案。我有一个可执行的 jar 文件(基于 JavaFx 的应用程序),我可以轻松地从 bash 开始:

java -jar myapp.jar

我希望这个应用程序从 Ubuntu 的侧面板启动,所以我正在创建 .desktop 文件并将其放在 /usr/share/applications 目录中。它成功了,我在应用程序列表中看到了我的应用程序,将其标记为收藏,它出现在侧面板中以供快速访问。但是当我运行它时,Gnome 会创建另一个关联的 .desktop 文件(临时)并在其下放置一个点,而不是使用我的。

那么,如何将我的应用与 .desktop 文件捆绑在一起?因此,当我运行我的应用程序时,我希望 Gnome 在正确的 .desktop 文件下放置一个点(我从中运行它!!)。例如,在运行 Visual Code 或 Intellij Idea 时,我在它们下面有一个点,即使我是从 bash 中执行的。真的,我搜索 idea.desktop 文件,查看它使用哪个可执行文件,转到该可执行文件,然后从 bash 运行它,它会链接到 idea 的图标!

/snap/bin/intellij-idea-ultimate

当然,我不确定它是否是通常的可执行文件,但无论如何它是如何工作的?我认为 .desktop 文件负责这种链接,但是如果我从 bash 运行可执行文件并且 gnome 会在右侧图标下放置一个点,而无需从此图标开始...

【问题讨论】:

@NomadMaker 以及它如何适用于我的问题? 首先有一个不错的 gradle 插件,它可以构建运行应用程序的脚本,它被称为应用程序插件。 此外,为 java 应用程序构建桌面文件应该没有区别。只需使用 java 可执行文件并给它 -jar your.jar 参数。 developer.gnome.org/integration-guide/stable/… 阅读此文告诉你如何创建一个。 【参考方案1】:
   [Desktop Entry]
   ....
   StartupWMClass=<fully qualified Application class name>

例子:

   [Desktop Entry]
   ....
   StartupWMClass=org.mycompany.app.Application

【讨论】:

【参考方案2】:
    打开终端 运行:xprop WM_CLASS 点击您的应用程序窗口 复制终端中生成的字符串之一 将其添加到您的 .desktop 文件中。关键是“StartupWMClass”。所以它看起来像 StartupWMClass="你之前复制的字符串。

应该可以的。

例如,这就是我的 firefox .desktop 的样子

 [Desktop Entry]
...
    StartupWMClass=Firefox
    StartupNotify=true

【讨论】:

以上是关于如何将 Java 应用程序捆绑到 Gnome/Ubuntu 中的关联 .desktop 文件?的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 库与 DB2 Java 存储过程捆绑在一起

如何将 jnlp 与 OSX 停靠图标捆绑在一起;这在 java 首选项中似乎不再可能

如何将Symfony 3捆绑应用程序升级到Symfony 4无捆绑应用程序?

如何将脚本捆绑到 dmg 文件中

如何将整个 Vue 应用程序捆绑为单个 UMD 模块

如何将所有 python 代码捆绑到一个 zip 文件中?