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
所以我的解决方法是将此行添加到两者
- /opt/oolitecommunicator/lib/oolitecommunicator-OoliteCommunicator.桌面
- /usr/share/applications/oolitecommunicator-OoliteCommunicator.桌面
在安装 deb 之后。没那么简单,因为我猜 jpackage 是为...
所以我终于找到了合适包装的可能性。
您需要覆盖 JPackage 内部模板并提供您自己的 .desktop 文件。这可以通过 overriding JPackage resources.
来完成
这意味着您创建一个资源文件夹,其中包含正确的 .desktop 文件,在 JPackage 命令行中指定资源文件夹,将创建正确的包。
我刚开始使用 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
所以我的解决方法是将此行添加到两者
- /opt/oolitecommunicator/lib/oolitecommunicator-OoliteCommunicator.桌面
- /usr/share/applications/oolitecommunicator-OoliteCommunicator.桌面
在安装 deb 之后。没那么简单,因为我猜 jpackage 是为...
所以我终于找到了合适包装的可能性。
您需要覆盖 JPackage 内部模板并提供您自己的 .desktop 文件。这可以通过 overriding JPackage resources.
来完成这意味着您创建一个资源文件夹,其中包含正确的 .desktop 文件,在 JPackage 命令行中指定资源文件夹,将创建正确的包。