我想将我的 Java 应用程序打包为 Debian 软件包。我正在使用 Netbeans(8.0.1) 的内置本机打包程序来执行 Deb-Packages
打包后输出如下:执行失败:java.io.IOException:无法运行程序"命令"(在目录中)
"/home/testuser/Songs"):error=2,没有这样的文件或目录 /home/testuser/Songs/nbproject/jfx-impl.xml:3415:执行此行时发生以下错误: /home/testuser/Songs/nbproject/jfx-impl.xml:3584:错误: JavaFX 原生打包程序需要 Debian Packager 工具来创建 DEB 软件包,但找不到 dpkg。 生成失败(总时间:1 秒)
我已经用apt-get安装了dpkg-dev。 $PATH变量包含/usr/bin
我不知道如何解决这个问题。 有人知道为什么 NetBeans 找不到 dpkg?
我解决了覆盖nbproject/jfx-impl.xml中目标-check-dpkg-presence定义的问题。
原始目标在项目文件夹中查找"命令"文件。该行检查 dpkg 的真实路径。运行命令 -v dpkg 你会得到/usr/bin/dpkg。
这与你尝试这条线得到的是一样的
哪个 dpkg ==>/usr/bin/dpkg
所以我在构建中这样做.xml
<target name="-check-dpkg-presence" depends="-check-native-bundling-type" if="need.dpkg.presence">
<local name="exec.which.dpkg.result"/>
<local name="exec.which.dpkg.output"/>
<exec executable="which" failifexecutionfails="false" failonerror="false" resultproperty="exec.which.dpkg.result" outputproperty="exec.which.dpkg.output">
<arg line="dpkg"/>
</exec>
<condition property="missing.dpkg">
<not><and>
<isset property="exec.which.dpkg.result"/>
<equals arg1="${exec.which.dpkg.result}" arg2="0"/>
<isset property="exec.which.dpkg.output"/>
<not><equals arg1="${exec.which.dpkg.output}" arg2=""/></not>
</and></not>
</condition>
</target>
我更改了 arg 标签的属性(可执行文件='哪个')和行属性。
它有效。
如果您尝试在项目目录中运行ant -v build-native
,您将看到错误。NetBeans 创建的 ant 构建脚本正在尝试运行command dpkg ...
来构建包,但由于"command"是/bin/bash 中的内置 shell 命令,因此 PATH 中对"command"的测试失败。
我在本地路径中创建了一个名为"command"的 shell 脚本:
#!/bin/bash
command $@
这工作正常。