繁体   English   中英

如何创建一个自执行的JAR文件

[英]How to create a self-executing JAR file

我不是在寻找一种使我的JAR可运行的方法,而是在自我执行。 我发现了这篇文章:

http://en.newinstance.it/2012/04/17/self-executing-jar-files/

我按照列出的步骤进行操作,并根据需要创建了文件。 我以为我可以运行它(因为它将运行),但是我意识到它实际上并没有运行JAR文件的正确版本(嵌入BAT文件的版本),而是运行文件系统中的版本。

当我从文件系统中删除JAR文件时,Java错误提示它无法找到该文件。 以下是我为我的小测试项目创建的“ make”脚本。 但是,您将需要替换自己的路径和Java文件。

任何人都可以得到一个可行的例子吗? 我最终希望能够使用一个包含嵌入式二进制文件的自包含批处理文件。

@echo off
cd /d D:\current\battle
javac -d classes src\RemoveFiles.java
pushd classes
echo Main-Class: RemoveFiles > MANIFEST.MF
jar -cvmf MANIFEST.MF ..\RemoveFiles.jar RemoveFiles*.class 
popd
echo @java -jar RemoveFiles.jar %%^* > removeStub.bat
echo @exit /b >> removeStub.bat
copy removeStub.bat /b + RemoveFiles.jar /b RemoveFiles.bat /b

感谢您的任何帮助...

吉姆,是的,你是正确的。 确实,我没有完全按照需要完成的工作。 尽管指出了我错了哪一部分,而不是标准的RTFM响应,您可能会有所帮助。

对于将来遇到此问题的任何人,这是完整/正确/已清理的“ make”批处理文件...

@echo off
setlocal
cls

set HOME_DIR=D:\current\battle
set CLASS_DIR=classes
set SRC_DIR=src
set CLASS_NAME=RemoveFiles
set STUB=stub.bat

cd /d %HOME_DIR%
javac -d %CLASS_DIR% src\%CLASS_NAME%.java
pushd %CLASS_DIR%
echo Main-Class: %CLASS_NAME% > MANIFEST.MF
jar -cvmf MANIFEST.MF ..\%CLASS_NAME%.jar %CLASS_NAME%*.class 
popd
jar -uf %CLASS_NAME%.jar %CLASS_DIR%\%CLASS_NAME%.java
echo @java -jar %%~n0%%~x0 %%* > %STUB%
echo @exit /b >> %STUB%
copy %STUB% /b + %CLASS_NAME%.jar /b %CLASS_NAME%.bat /b
del %CLASS_NAME%.jar
del %STUB%

endlocal

注意:重要的是不要只使用%0。 如果将批处理文件作为“ RemoveFiles”运行,则它将不起作用,因为$ 0值中缺少“ .bat”。 如果以“ RemoveFiles.bat”运行,则%0将是完整文件名,从而允许Java将批处理文件定位为JAR文件。

因为我们制作批处理文件是为了节省我们的时间和键入时间,所以它们经常执行而没有指定“ .bat”部分。 因此, %%~n0%%~x0作用是强制名称和扩展名,而不管在命令行上指定了什么。 需要回避百分号,因为它们已被回显,这就是为什么有两个。 在最终的批处理文件中,只有一个。

我希望这可以帮助下一个寻找这个人的人...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM