jpackage linux 创建的桌面文件不足

jpackage linux creates insufficient desktop file

我刚开始使用 jpackage,它是一个非常棒的工具。一步之遥可以减轻我的大量工作。我对看起来硬编码且无法自定义的东西越惊讶?

JPackage 自动生成启动器(lib/<application>.desktop 文件),deb 包自动安装它,以便所有用户都可以启动应用程序。但是一启动,unity又弹出另一个图标。我希望现有图标标记为 运行.

根据 Ubuntu DEB installer makes all Java applications have the same icon 我们只需要确保 .desktop 文件包含正确的 StartupWMClass。使用 xprop 我发现这个值是基于对 window 负责的完全限定的 class 名称 - 这绝对有意义。

那么我如何告诉 jpackage 在生成的 .desktop 文件中设置哪个 StartupWMClass?

编辑:为了补充 Bodo 的评论,我将展示如何调用 jpackage。事实上,我自己并不是 运行 命令行 - 相反,我使用的是配置为:

的 maven 插件
        <plugin>
            <groupId>com.github.akman</groupId>
            <artifactId>jpackage-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jpackage</goal>
                    </goals>
                    <configuration>
                        
          <dest>target</dest>
          <name>OoliteCommunicator</name>
          <type>PLATFORM</type>
          <appversion>${project.version}</appversion>
          <description>Oolite Communicator is an add-on for Oolite to allow multiplayer interaction. (check http://oolite.org)</description>
          <vendor>Hiran</vendor>
          <icon>target/classes/com/mycompany/oolitecommunicator/ui/Communicator_Logo_Icon.png</icon>
          <input>target/dist</input>
          <mainjar>OoliteCommunicator-${project.version}.jar</mainjar>
          <mainclass>com.mycompany.oolitecommunicator.Main</mainclass>
                        
                    </configuration>
                </execution>
            </executions>
        </plugin>

我在 maven 构建过程中看到的是这个输出,我认为这是插件调用 jpackage 时内部生成的命令行。最后一行可能已经是调用,每当我在构建后检查时,都没有文件 /home/hiran/NetBeansProjects/OoliteCommunicator/target/jpackage.opts。我只能假设它的内容是之前记录的。

# jpackage
--dest /home/hiran/NetBeansProjects/OoliteCommunicator/target
--app-version '1.0-20211220-090022'
--description 'Oolite Communicator is an add-on for Oolite to allow multiplayer interaction. (check http://oolite.org)'
--name 'OoliteCommunicator'
--vendor 'Hiran'
--icon /home/hiran/NetBeansProjects/OoliteCommunicator/target/classes/com/mycompany/oolitecommunicator/ui/Communicator_Logo_Icon.png
--input /home/hiran/NetBeansProjects/OoliteCommunicator/target/dist
--main-jar 'OoliteCommunicator-1.0-20211220-090022.jar'
--main-class com.mycompany.oolitecommunicator.Main
/usr/lib/jvm/java-16-openjdk-amd64/bin/jpackage @/home/hiran/NetBeansProjects/OoliteCommunicator/target/jpackage.opts

最后我得到了一个带有这个桌面文件的 deb 包:

[Desktop Entry]
Name=OoliteCommunicator
Comment=Oolite Communicator is an add-on for Oolite to allow multiplayer interaction. (check http://oolite.org)
Exec=/opt/oolitecommunicator/bin/OoliteCommunicator
Icon=/opt/oolitecommunicator/lib/OoliteCommunicator.png
Terminal=false
Type=Application
Categories=Unknown
MimeType=

我通过手动添加行

修复了该行为
StartupWMClass=com-mycompany-oolitecommunicator-Main

所以我的解决方法是将此行添加到两者

在安装 deb 之后。没那么简单,因为我猜 jpackage 是为...

所以我终于找到了合适包装的可能性。

您需要覆盖 JPackage 内部模板并提供您自己的 .desktop 文件。这可以通过 overriding JPackage resources.

来完成

这意味着您创建一个资源文件夹,其中包含正确的 .desktop 文件,在 JPackage 命令行中指定资源文件夹,将创建正确的包。