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

如何使一个原生的 linux 应用程序在 linux 中可执行,作为 JPackage 安装的一部分

东郭弘方
2023-03-14

我正在使用适用于 linux 的 JPackage(Java 14)打包一个 Java 应用程序(称为 Jaikoz)。

Java应用程序有时必须调用一个名为fpcalc64的c程序,在安装时它存储在应用程序文件夹中,但它只有rw权限

问题1

作为安装的一部分,有没有办法给它执行权限?

问题二

即使我手动进入应用程序文件夹,并使用< code>chmod 777 fpcalc64授予完全执行权限,它仍然不运行,我的Java程序抱怨它没有权限,即使我重新启动应用程序,这种情况仍然会发生,这是怎么回事?

例如

失败

Jul 4, 2020 11:17:46 AM: WARNING: Unable to retrieve an acoustic id for song 2 file /home/ubuntu/Downloads/RedSharp_-_Walk_in_the_row.mp3 because Cannot run program "/home/ubuntu/code/jthink/jaikoz/JaikozAppImage/jaikoz/lib/app/fpcalc64": error=13, Permission denied

但是如果我从linux shell运行,它就能工作

ubuntu@ubuntu:~/code/jthink/jaikoz/JaikozAppImage/jaikoz/lib/app$ ls -l fpcalc*
-rwxrwxrwx 1 ubuntu ubuntu 2210876 Jul  4 11:15 fpcalc
-rwxrwxrwx 1 ubuntu ubuntu 2249272 Jul  4 11:15 fpcalc64
ubuntu@ubuntu:~/code/jthink/jaikoz/JaikozAppImage/jaikoz/lib/app$ ./fpcalc64 /home/ubuntu/Downloads/Red*
FILE=/home/ubuntu/Downloads/RedSharp_-_Walk_in_the_row.mp3
DURATION=273
FINGERPRINT=AQADtIsURmsSDc9i44-Iqsemr8a1MIOXKBHCi9CJ0M7R-MH5oNNy_Dp26ag55EmUJ5DjI-zREE-P9wz-odeKCyGbHXriIj8qbiYaPRue4_zx7MHHE1eiw1yE80d1IdmDnDy-LCeub_gVVLkGP8uHmTNhVjkicUeyh0MTHs_RE8-Jurg7XItwHVl-aFmHPGMq_Al-NCGFx0d6adD6I39RnQoaTXmK48JhTqOM58R19LED8yBf9LvQo1GW4viRk4Qm6cUvpHlRi8dn9MngFqRy-EdGlNPxHbp8oR8aLnvBLkb_4I8KS9Kh57jEKsOv4nD04UeZmZDyC64efLB1jK8Oj8hP-BSuF7aQ92h-4h1eKJJ1wYErregFzTWaH_m14Q--o9nsEe47Ij_EG33GI8e14xQf1Eifo5Z03IeeK2C0ODGaD6xl5Kh9OD68HdfwhuiPH33x9kg7HdpRuQgjnbiOe8Sn0EJt-AsR6sVxPQr65vg0aM8KjeTB5Hi4RviLJqYI7QoqsTApR4PPJwi_9LiHJmWCfmiyODWYX0OTLzfCB1c-4UQf6Dj0p3gH7xH8o8-Ja4rxoz--CHpy-EWPH_2h5dODUoaWmDmeo4ko5UKbzQquNJmGypnRfIEmkUEeRcZzVNwSBv3RsBo4dUZu6HKHrgkk-aiVPUR-vNJQ-WgYx-ija7hGZCc0_ngQ6gt8432Cpk6Fp0dzIjx03AjThOGO5lfwLMWF9MIX5Qp0NFn04w5vNFUufNGhpWJcPIrR4CS-5RHK_9BSDXcIPyZ-HOdBv3hQbjKafxA8adXw49OFPEWjFrWy42FD9Irh6sgrodEuPG0CmclSXNA6wmMGbb3QTTwa8cGDPoPHHddycXijBdKNvGD-4CyRb8F3wV-c4LXBKxHywNlB9kf3C7YeNHQCcsaJ_IOWPZEQHz-e6DhFnFFwIvyhE2ePfDnyY8pz6IJ1uMoO7WGIp8fXM9gqpsITdNnRkDu0RYdjPcHHoMl_qL4F9gjDMSUOKj8YTlF8NDtRoeqGpjv4MwiTN4WG-OFhTUuMVUly9FHRcD3wHTl0ZUO46miyfcFz1Dr8HLYZtMtxS0P4Q26OfBpcFd-xySx64gadHWF2QeYxHb8SCuWSHV6iS3gG44fHoM0wLzqa8NvxV3ihmUeuXLiUXeiF5iCPlzijWEIiqk-QH490PDnqo3mOv-Dk44qMTyEajauCqyfCvNAzNOPRL7hyQs3AH8e-ZBx6K_CPib3AaMrRKMePoel79Ieu4seXD0-uQI_RrDOGcsFz_CG-Q6OPs4fxHY90KNdKuOqPThX2x2jqoFV2BXK0R9Cpw8-KnIyPH48O7ngySujbJPAyFln4Qz-meCtKXSPy4zq6oqlyfDu-6MFNo3kQXtARcXvw4Dn6rQkY5ccVBv5wSTVyXKIOPVEOLUm_oC_2aGhqtAuaS0XZQ-ml4dC_4x_6TEO-qPBuHFRSHWEfmTjyb2ge9PEwnDhznEeYZw4OHdEzo8-L97gSXPLxojn7IKShbw_KHmEaBedBeifK4_sRppK64HkLXXnwHc0JbT8eqUT84OTxobKI9chv6PAe1CqDXEEppceRE1Oh6wquD_mM__B5ZGfx5YSu1OjRaH_QC9cOmWkBVzNYhkG1FxXFB155pE7wE39wTkmPSqeGI48P7UWqLqh19EfzlAS_408RXvDRHjpx4X6CHrkTGF15PEd2PUOrPPBxirg147tQlcepoz-a57gYEXqO3oOZN1AdPNMRWsePatsxRUd05oLuEz--En-HNq4Cxy0xrUflHmKVY3eh5Tl-_EPtUAg3H3m1GB3roWEkgQ9raOFHhA_hE99w6qjFw9pmdC06Ssh9MN3xB-mk4sLZTkV5mJPg6UevNjhlXLrQIFTUqZDyIf3xo77wpWiFO0HzCz_y458CPcOPhmCeDJcfPDjaw1aOE99YOCf0Hb-KJ6oAXTLxIz6u5YJvF33RH3ZytMgP6D_aa_iF_RE2hzCjKAFO9mj2GMc7Bs-O_6FwC02g9Qf35Xge4kPeG0ye43mCWjROvEa8Cc2Xoudx5Ceeo-Ee_PgjtfAT_Pjg_sgH-Q_C_MS9FGel4fjAMqimg8n649uDnEH1QfnhaUerHFeP_hGa88iF_sfV4WQ1nMfWC0dKp9BDNF9oPMFx_dDuIb3wk_CFtyZRXA7-4NNBTpa0IMweyEc-pnCVHJ8eWDum48sPxMWe51C9GY2eDvuFh1kCOdmxK4zQR-gPP8YZWjDXeNCXzLDmHNUjHFS-4hp-4moQi3yOU0IfNLJyXNJl9Dya7PmGf0d2aMdD9UhDJTpOYdyyoLrw40yOPCJ0lkH1G34t6MyPNEsiXSi1WegrWDn6rXh49N8RrSIS6zt85uiNP_hBEz4xysJnhCp1XDo-VVJg5slw4D0q4Uoe_KiuFL6CHipd5AmLRw-aL3GKacGRJzqSO3FwJi9-4c6Ekzm2G5eOW7GQK8pHNLF0dMWVQ2wm44FGIgxfvBSeJ8N9TAmp4LngXngraUGkLJAb9EOjkfg-4nF8bHqg8wKeHFf2oPqD5j_UDz_eLMV1fLlRwyPRZyyU7_jwREaYaWjH42WTEI2-ok6KXFGIH-KY-PiO64fOo3uQxtHhSaSIp0_gE0e6EhV1QldyGfl8-ErxCx-e6LiyNLiCKecBghQiADHAADJMAGeMMFoQAYA0kgCECSNEEKIQIIAII5QwBhACHABGAKWEEo4oQgVjggIBERGAOYGQIqgxJIBEAihHkQIMIWGAAggJBIAgAhEhkCJCQMEUMQQqIpQCQhgFhNUAAAIAck4IQQABLhEBgEHCGCMUUERgDARhQCipmEBACFgQAIIITZAAABACiABACGFIYEsAIoFQABoIFEgICAECAgI4AQggyghIgQNeCAMEIYAwgARCTgiSADCMUkGEIUAQwhgBQgABhJCKWEIFssAAaZQxQjFiiGKCCAGAUIAYo4RCkCEggCJSCEiBIcAwQokQBgECCJIECCUEM1ABBAgRkAICDCLCEEOEQwIRQRhCwFkAEGQGCY8UQ0AQAS4SAAhBFDEEWAEYIYwJoygAghmKAEAKEQIAEvIoQoAkCgJhiEKKECYgI8YhIglgyBgCACJAIASEMEgoooQRSCLCACGEGAMQIIQxJKBAwBgIkFBIAEMAIQQapZwzQgmBiCKIEeG5AUgYAwwDQhAEFHBAMAWIAA4QZCARyEKAIDHEEqIMAAQAYYAUFgBLjAACGYaAEIoAxggCgghiBEBgGGAAQ4AhAgAiBjkBAUHGEIeAABRQI4gAgBmhBCLGMQSAA8QJgBQABhlnFKAAAEqYAAYI5ABSTiilBBIGCMGoMGIAYRBghiEjgGACEUOREIICgQgASBklCHBAAIEUAgQBZgQSApCDlEKQAAIUcgYwA4AhgCpkgEAKGgQVUIYAxYASwDCiHALAEQcUAMICIQhRABJAiGYIACMIQUQgRYAzBCjABAHOACAUA0YQAABwRCIBwEFcCAIAAkAQgQgxDAgigDAKSEaQYEwQRBgSBjEhDDJIEOUEQUgBQqhBxAiACAMECEoYYYQRYYAQABkEEBBECEYEQoYQBBkSBBggiUFAAiIIIUKyIggABACAAAIDAA

问题3

我是否必须将fpcalc64存储在bin文件夹中而不是lib /应用程序中。如果我这样做,我该怎么做,它是一个预编译的二进制文件?

共有1个答案

韶硕
2023-03-14

我找到了解决方案(我以前碰过的东西)。

由于 Java 9 当你在 Linux 上用 Java 调用外部应用程序时,它使用 lib/jspawnhelper 来决定如何运行该应用程序。因为我提供了 Linux 运行时,但是当运行时签入源代码管理时,它是在 Windows 上构建的,所以它丢失了任何执行权限。因此,当我的应用程序抱怨权限时,它实际上是在抱怨jspawnhelper上的权限。

我还发现,如果您设置了权限,那么在构建包时,它们将受到尊重。我没有意识到这一点,因为之前我在Windows上构建linux安装程序,并且必须向Izpack安装程序添加额外的命令才能使它们可执行。

总之,解决方案是在jspawnhelper和fpcalc上设置执行权限,并提交到源代码控制,然后< code>Jpackage就可以工作了。

 类似资料:
  • 在Linux上创建JPackage安装程序Java应用程序的规范是什么? 我已经为Windows创建了一个安装程序,现在正在Linux上创建一个(使用Ubuntu) 到目前为止,我已经: 对于创建一个debian安装程序,它可以工作(安装尚未正常运行),但我对一些事情感到困惑,我不太熟悉linux环境。 无法看到linux-菜单-组或linux-快捷方式的效果 我应该使用linux-菜单-组还是l

  • 我有一个java应用程序,它在运行时会产生另一个JVM。然而,我想使用jpack打包我的应用程序,它运行得很好。但是在运行时,当我的应用程序尝试使用调用下一个JVM时 我必须知道,应用程序是使用定制的JVM启动的,并且没有像“java”这样的命令。所以我得到的错误是这个java。无法执行getAbsolutePath()。 如果没有java可执行文件,我的应用程序如何在单独的进程中运行另一个jar

  • 问题 > 如果javajdk没有安装在linux操作系统上,jar将不会运行。 如果在linux中运行JavaFXJAR,就会出现如下错误 后来,我做了这个。成功了。 要使用终端运行java-fx应用程序,请遵循以下步骤: 安装openjfx(如果尚未安装): 列出javafx库位置: 输出如下: ./usr/usr/share/usr/share/doc/usr/share/doc/openjf

  • 我正在使用JPackage(OpenJDK 15.0.1)为Windows制作一个可移植的可执行文件。我尝试了下面的命令,但我双击了生成的exe文件,显示了安装程序窗口。它似乎不是可移植的可执行文件,而只是安装程序。 有什么办法可以用JPackage制作一个不用安装就可以使用的可执行文件?

  • 我使用jpack打包了我的java应用程序。当我使用打包的安装程序安装它时,安装后的目录始终是

  • 安装了jpackage应用程序后,我如何允许用户升级应用程序,而不需要再次运行安装程序?我有哪些选项允许用户升级? 理想的情况是,底层JAR将在运行时被调出,应用程序将在同一进程中重新启动。我想这可能是不可能的?