请注意:我已经创建了,它可以用来完美地再现我所看到的问题。
这里的Java8试图通过Windows插件使用Launch4J来构建分级发射4j本机EXE应用程序。我正在我的Mac上开发一个Java应用程序,但是这个应用程序必须作为Windows运行在Windows10上,我还在使用ShadowJar来构建我自己的“胖罐子”。
我可以构建我的(Swing)应用程序的胖罐子,然后通过java -jar build/lib/myapp.jar
在我的Mac上运行它。它的启动和运行没有问题。
下面是Launch4J的Gradle配置:
launch4j {
mainClassName = 'com.example.windows.hello.HelloWindowsApp'
icon = "${projectDir}/icon.ico"
jdkPreference = 'jdkOnly'
initialHeapSize = 128
jreMinVersion = '1.8.0'
jreMaxVersion = '1.8.9'
maxHeapSize = 512
stayAlive = false
bundledJre64Bit = true
bundledJrePath = '../hello-windows/jre8'
}
当我运行./gradle clean build shadowJar createExe createDistro
时,它会生成:
hello-windows.zip/
hello-windows.exe --> The Windows EXE built by the 'createExe' task
lib/* --> The lib/ dir for the EXE that is also built by the `createExe` task
jre8/ --> OpenJDK JRE8 (copied from the libs/jre8 dir)
因此,我复制该ZIP文件并将其移植到Windows 10 (64位)计算机上。我提取ZIP并通过在Windows中双击EXE来运行EXE (我可以确认,它将EXE视为应用程序类型)。我首先看到的是:
为什么会发生这种情况?,是否有任何Launch4J配置/设置可以更改,这样就不会发生这种情况?
提前感谢!
发布于 2019-12-06 07:20:20
你的第一个问题更像是一个Windows问题。当您从zip文件解压缩应用程序时,Windows自然会将其标记为不安全,实际上,如果您选中“应用程序属性”选项卡,您将看到一个复选框,其中可以删除该不安全属性。这与在Linux中为可执行脚本运行chmod+x
是一样的。
对于第二部分,我假设您正在为Launch4j使用gradle插件,假设您的项目文件夹通常是用包含可执行文件夹的同一个文件夹中的jre库构造的,那么配置Launch4j有两种主要方法。
最后生成的xml在第一种情况下应该是这样的。
<jre>
<path>../jre</path>
</jre>
主要的一点是,JRE的路径相对于可执行文件的位置,而不是当前目录。在本例中,我们将一个目录从可执行文件夹退到包含jre的文件夹。
发布于 2019-12-09 09:28:01
发布于 2019-12-04 10:12:19
尝试将bundledJrePath
设置为build.gradle
中的jre8
launch4j {
...
bundledJrePath = 'jre8'
}
因为在您的情况下,这是提取zip时jre所在的相对路径。
http://launch4j.sourceforge.net/docs.html
<path>
,<minVersion>
,<maxVersion>
<path>
属性用于指定绑定的JRE的绝对路径或相对路径(可执行文件),它不依赖于当前目录或<chdir>
。请注意,直到实际的应用程序执行时,才会检查此路径。
请注意,路径不能包含/bin/javaw.exe
。
使用以下调试标志运行exe时
hello-windows.exe --l4j-debug
然后,它将在同一个目录中创建一个文件launch4j.log
。在那里,您可以检查正确的jre是否被选中,例如:
...
Bundled JRE: jre8
Check launcher: C:\Users\IEUser\Downloads\hello-windows\jre8\bin\javaw.exe (OK)
...
https://stackoverflow.com/questions/59073220
复制相似问题