Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将.java或.jar文件转换为Linux可执行文件(没有.jar扩展名,这意味着它不是.jar文件)_Java_Linux_Eclipse_Wrapper_Executable - Fatal编程技术网

如何将.java或.jar文件转换为Linux可执行文件(没有.jar扩展名,这意味着它不是.jar文件)

如何将.java或.jar文件转换为Linux可执行文件(没有.jar扩展名,这意味着它不是.jar文件),java,linux,eclipse,wrapper,executable,Java,Linux,Eclipse,Wrapper,Executable,我一直在寻找许多类似的帖子,但我仍然找不到我的答案。我想将一个.java程序转换成一个Linux可执行文件,不带.jar扩展名。我怎么做?我试图使用launch4jjava包装器、JWrapper、IzPack、make.sh、make.bat、使用java-jar myFile.jar等运行它,但它们都不起作用。有些程序很复杂,很难调试。有没有直接的方法将.java文件或.jar文件转换为Linux可执行文件 我需要将这个程序作为一个Linux可执行文件作为一个整体传递到另一个以这个程序为参数

我一直在寻找许多类似的帖子,但我仍然找不到我的答案。我想将一个.java程序转换成一个Linux可执行文件,不带.jar扩展名。我怎么做?我试图使用launch4jjava包装器、JWrapper、IzPack、make.sh、make.bat、使用java-jar myFile.jar等运行它,但它们都不起作用。有些程序很复杂,很难调试。有没有直接的方法将.java文件或.jar文件转换为Linux可执行文件


我需要将这个程序作为一个Linux可执行文件作为一个整体传递到另一个以这个程序为参数的程序中

你可以做一个小小的C程序,将其中一个exec函数(参见man 3 exec)调用到“java”二进制文件,将“-jar”、“xxx.jar”作为参数传递,另请参见

我找到了一个解决方案,这正是我经过数小时的搜索和尝试后想要的。在linux中使用gcj命令

<>它像GCC一样用于C++和g++,它将C或C++程序编译成可执行文件。p> 首先使用终端通过键入以下内容安装gcj:

sudo apt-get install gcj-jdk
然后,将cd放入.jar文件所在的目录中,假设.jar文件是myFile.jar,然后执行以下操作:

gcj myFile.jar -o newNameofTheFile --main=theMainClassNameofTheFile
编译.jar文件。它应该像可执行文件一样工作,只需在命令行中运行它,如下所示:

./newNameofTheFile

假设您有一个名为helloworld.jar的可运行jar

将下面的Bash脚本复制到名为stub.sh的文件中

#/垃圾箱/垃圾箱
我自己=`which“$0”2>/dev/null`
[$?-gt 0-a-f“$0”]&我自己=“../$0”
java=java
如果测试-n“$JAVA_HOME”;然后
java=“$java_HOME/bin/java”
fi
java_args=-Xmx1g
exec“$java”$java_args-jar$imf”$@
出口1
然后,将jar文件附加到保存的脚本中,并通过以下命令向生成的文件授予执行权限:

cat stub.sh helloworld.jar>helloworld.run&&chmod+x helloworld.run
就这些

现在,您只需在shell终端上键入helloworld.run即可执行该应用程序

该脚本足够聪明,可以将任何命令行参数透明地传递给Java应用程序

字幕:保罗·迪托马索


来源:

将jar转换为Linux可执行文件的另一个简单技巧是在jar文件之前放一个shebang

假设我们有一个hello.jar文件

$ java -jar hello.jar
hello world!
您可以通过以下步骤创建可执行文件

$ echo "#! /usr/bin/env java -jar" > hello
$ cat hello.jar >> hello
$ chmod +x hello
然后,您将能够直接执行hello文件

$ ./hello
hello world!


为什么只为linux创建.sh文件?我想java的优点是跨平台,你只需要安装JRE,一个jar就可以在任何操作系统上运行,我试过创建一个.sh文件,但它不起作用。原因是我有一个主程序,它是由其他人修复和编写的,我只能将我的程序作为Linux可执行文件(而不是.jar)传递给它。我正在用Java开发它。@pythonhiew:我想你也可以用Java-jarfilename.jar这样的命令来运行jar。为什么不制作一个bash来运行命令并启动JAR呢?我不明白为什么.sh脚本会和“linux可执行文件”有什么不同,它也是可执行的。大部分linux可执行文件实际上都是脚本——如果这不起作用,那么我也看不出其他可执行文件是如何工作的。另外:Launch4j用于创建本机windows可执行文件,我不认为这对Linux环境有什么帮助。请确保您的.sh文件确实是可执行文件(chmod+x yourfile.sh),也许这就是问题所在。如果您将shell脚本传递给的工具不喜欢.sh结尾,只需将其重命名,忽略.sh结尾.Bram谢谢您的回答。我找到了一个简单的解决办法,我把答案贴在了下面。我还是把你的答案投了更高的票,因为它是有意义的。我没有试过,但这是一个很好的主意。gcj已经被认为过时多年了。是的,chrylis,但是在我尝试了所有的方法之后,它仍然有效。比如用java-jar myFile.jar等运行它,或者使用.bat、.sh,都失败了。然而,这是成功的。因为我必须将这个编译好的程序作为参数传递到另一个程序中,而另一个程序不采用任何形式的参数,即.jar、.sh、.bat,除非是在gcj编译的程序之后。@pythonhiew,它很好地工作了,但如果使用现代Java构造,它将无法工作,如果你对性能一点也不感兴趣,那么这么做真的不是个好主意。这是一个紧急解决方案,仅此而已。我自己没有尝试过,但对任何感兴趣的人来说,你都应该感兴趣(tl;dr:它确实过时了)。什么是
$java_args
?它可以是任何JVM arg,比如-Xmx,-Xms等等。。。示例已更新。如果用户仍然需要在其计算机上安装JRE,那么此shell包装的意义何在。对于javaHi@pouya,我们需要类似于
pyinstaller
的东西,重点是避免每次调用java程序(JAR文件)都需要在前面加上“java-JAR-your.JAR”,这样您就可以将可执行脚本放在系统路径上,并从任何地方将其作为任何普通命令/二进制文件调用。特别是,许多国内用户不了解什么是JAR文件,我认为他们不需要使用Java编写的软件。这只会导致
/usr/bin/env:Java-JAR:没有这样的文件或目录
@chrixm请确保
/usr/bin/env
正常工作。裁判: