当前位置: 首页 > 知识库问答 >
问题:

jpackage linux创建的桌面文件不足

穆宏胜
2023-03-14

我刚开始使用jpack,它是一个非常棒的工具。一步就可以让我轻松完成很多工作。我对看起来硬编码且无法定制的东西就越感到惊讶?

JPackage自动生成启动器(lib/

根据Ubuntu DEB安装程序使得所有的Java应用程序都有相同的图标,我们只需要确保。桌面文件包含正确的< code>StartupWMClass。使用xprop,我发现这个值是基于负责窗口的完全限定类名的——这绝对有意义。

那么我如何告诉jpackage在生成的。桌面文件?

编辑:为了补充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=

我通过手动添加行修复了bhaviour

StartupWMClass=com-mycompany-oolitecommunicator-Main

所以我的解决方法是将这一行添加到两个

  • /opt/oolitecommunicator/lib/oolitecommunicator oolitecommunicator。桌面
  • /usr/share/applications/oolitecommunicator-oolitecommunicator.desktop

安装deb后。我想不像jpack那样容易……

共有1个答案

乌修筠
2023-03-14

所以最终我发现了一种可能,那就是拥有合适的包装。

您需要覆盖JPackage内部模板并提供您自己的模板。桌面文件。这可以通过覆盖JPackage资源来实现。

这意味着您使用正确的。桌面文件,在JPackage命令行上指定resource文件夹,将会创建正确的包。

 类似资料:
  • 要求是创建一个可以注册点击事件的桌面通知。我不能使用web套接字或任何浏览器通知 我无法使用任务栏图标和系统任务栏,因为它们无法在显示消息上注册单击事件。他们可以在trayicon上有点击事件,但不能在显示消息上。最接近的例子——“当我们注册一条Skype消息时,它会为我们打开Skype” 截图 点击上面的通知Skype聊天打开。托盘图标不支持相同的功能。要么围绕它工作,要么采取新的方法。 希望我

  • 这怎么了? 我有Windows10 Pro。所以,我有Docker Desktop并且我正在使用WSL2

  • 我有一个用Java编写的小实用程序,用Netbeans作为“Maven项目”编写(项目上的小图标上有一个样式化的“m”)。我想把这个实用程序以及它所依赖的库打包成一个jar文件;我希望jar文件包含必要的运行库,这样我就不必单独打包它们。 Netbeans指令说,当我运行build时,我将在项目目录下创建'dist'和'lib'目录,并且(因为我在项目属性中设置了主类),我将在清单文件中指定它。所

  • 本文向大家介绍简单掌握Android Widget桌面小部件的创建步骤,包括了简单掌握Android Widget桌面小部件的创建步骤的使用技巧和注意事项,需要的朋友参考一下 一、Widget设计步骤   需要修改三个XML,一个class:   1.第一个xml是布局XML文件(如:main.xml),是这个widget的。一般来说如果用这个部件显示时间,那就只在这个布局XML中声明一个text

  • 我有一个3模块的maven项目,其母公司是pom。当我运行maven clean编译测试时,来自父级。它在测试阶段失败,并为我的本地类提供了大量编译错误,如“找不到符号”。 我发现使用IntelliJ ide如果在运行maven测试之前使用“生成项目”按钮,那么maven测试就可以工作! 编辑:现在我弄清楚了,由于某种原因,maven编译不会在目标文件夹中创建类文件,这是我在父pom文件中的mav

  • 我想使用jnlp在桌面(Windows)中为Oracle窗体中的应用程序创建快捷方式。 我有一个这样的jnlp(示例): (https://oracle-base.com/articles/11g/oracle-forms-11g-and-java-web-start) 这是正确的工作。我把它贴在一个网站上,当按钮被点击时打开它。像这样: 如果我按下任何一个按钮(我不知道两者之间有什么区别),应用