launch4j中的.exe文件与java文件的工作方式不同。我错过什么了吗?

launch4j中的.exe文件与java文件的工作方式不同。我错过什么了吗?,java,jar,environment-variables,exe,launch4j,Java,Jar,Environment Variables,Exe,Launch4j,作为一名java新手,并将程序与代码捆绑在一起,我能够成功地运行一个简单的新HelloWorld java文件获得正确的输出。因此,我相信java文件在编译成类文件或之后运行它方面没有问题,而且我在java工具包中拥有创建可执行文件所需的所有文件。但是,我不确定是否正确使用launch4j来获取.exe,无论是通过设置.jar还是通过生成正确的.xml文件 下面的代码显示了当我尝试将所有内容放入.jar文件时得到的结果,但我猜输出是错误的,因为除非在jar命令中从“cvfm”中去掉“m”,否则不

作为一名java新手,并将程序与代码捆绑在一起,我能够成功地运行一个简单的新HelloWorld java文件获得正确的输出。因此,我相信java文件在编译成类文件或之后运行它方面没有问题,而且我在java工具包中拥有创建可执行文件所需的所有文件。但是,我不确定是否正确使用launch4j来获取.exe,无论是通过设置.jar还是通过生成正确的.xml文件

下面的代码显示了当我尝试将所有内容放入.jar文件时得到的结果,但我猜输出是错误的,因为除非在jar命令中从“cvfm”中去掉“m”,否则不会生成新的.jar文件。代码确实显示了一些关于添加清单的信息,无论何时添加,但我仍然没有得到一个合适的应用程序。在没有启动4j而获得正确的输出后,我停止了重新创建.java和.class文件,而在重新创建.jar文件时,我只关注.xml文件,没有什么不同。我尝试过在launch4j中,在JRE选项卡中将环境变量留空,或者只是在命令提示符中包含java文件正确使用的系统变量的相同路径,并且我还将GUI的检查切换到了header选项卡中的console。研究还告诉我要查找manifest.mf文件,我认为JDK中没有这个精确的文件,但可能在工具包中找到了类似的东西(至少在查看bin文件夹等典型区域时是这样)

C:\JavaTest>jar-cvfm-HelloWorld.jar-HelloWorld.class
java.io.IOException:标头字段无效
位于java.util.jar.Attributes.read(Attributes.java:406)
位于java.util.jar.Manifest.read(Manifest.java:234)
位于java.util.jar.Manifest。(Manifest.java:81)
位于java.util.jar.Manifest。(Manifest.java:73)
位于sun.tools.jar.Main.run(Main.java:176)
位于sun.tools.jar.Main.Main(Main.java:1288)
C:\JavaTest>jar cvf HelloWorld.jar HelloWorld.class
新增舱单
加上:HelloWorld.class(in=426)(out=289)(缩减32%)
在测试包装器时,我总是收到关于签名的警告,但我不认为这是一个像实际错误那样的问题。由于众多组合的性质,很难跟踪问题差异的原因,但现在似乎将JRE选项卡留空(除了具有最小JRE版本)会在launch4j中的包装器测试中产生错误“no main manifest attribute”。将系统变量路径的最末端包含在环境变量字段中也可以执行相同的操作。在尝试重新创建.jar之前,将头切换到console将创建一个没有错误的.exe,但是打开应用程序将不执行任何操作,或者将相同的“no main manifest attribute”输出放在命令提示符中。现在,我甚至不能使用launch4j来测试控制台上有标题的包装器,即使构建它们时不会产生错误(但是打开.exe时也会发生相同的错误)。我只是想让launch4j生成的.exe在命令提示符中提供与在那里键入“JavaHelloWorld”时相同的输出


如果我确实正确地创建了.jar并正确地使用了launch4j,那么我是否错过了需要某种清单文件来使用launch4j的未列出的步骤?如果是,我如何确保我得到了正确的答案?它会出现在bin文件夹中还是与JDK完全分离?我是否需要将其移动到我的JavaTest文件夹中,其中包含java/class/jar/exe文件?非常感谢您的帮助。

jar cvfm中的“m”代表清单,这意味着您将提供一个文件作为清单的参数。f代表:您将指定文件名

因此,
HelloWorld.jar
是f的参数,
HelloWorld.class
是m的参数。显然,您的类文件不是有效的清单文件,因此发生错误

通常,使用构建工具来创建JAR,例如maven或gradle。您需要一个清单才能拥有一个主类属性,您需要一个主类属性来创建一个可运行的jar,您需要一个可运行的jar来启动它

创建一个名为MANIFEST.MF的文件。使用纯文本编辑器创建它。它应包括:

Main-Class: com.foo.thisIsAPackage.YourMainClass
没有别的了

然后:


请注意,我非常确定您必须有一个软件包,否则这将不起作用。

我安装了maven,并且在命令提示符处输入“mvn-v”似乎表明文件夹位置以及环境变量的路径可以正常工作(尽管我不知道正确的输出是否会证实这一点)。我假设我可以逐字输入您所做的,并在以后更改主类名的部分内容,但是我应该将MANIFEST.MF文件存储在哪里?maven工具包位于我的JavaTest文件夹中,其中包含我的示例java/class/jar/xml/exe文件,但与保存JDK的文件夹分离,尽管仍在本地C驱动器中。将MANIFEST.MF存储在apache文件夹的bin中似乎不起作用。实际上,maven kit和apache文件夹位于程序文件中,如所示的安装说明,但无论哪种方式,命令提示符中的错误消息仍然是“java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)”。。。一些研究讨论了对xml文件进行编辑,以包括maven和清单,以及对命令提示符的更多输入。另外,我看到的页面谈到MANIFEST.MF在META-INF下,我对此一无所知。我需要做更多的工作来激活maven工具包吗?还是.jar会自动处理您的文本?stackoverflow注释不是“how Do I maven”会话的合适位置。我从maven的文档开始,它有很多教程。我想现在我不知道了。我看到Launch4j被列为捆绑Ja的工具
Main-Class: com.foo.thisIsAPackage.YourMainClass
jar cvfm HelloWorld.jar MANIFEST.MF YourMainClass.class