JavaFX-приложение Jwrapper one-jar ClassNotFoundException
У меня есть отдельное приложение JavaFX, созданное с использованием плагинов Maven onejar. Когда я запускаю автономный JAR-файл, все работает так, как ожидалось, но когда я собираю.jar в.exe с помощью JWrapper, мне нужно указать основной класс. В этом нет необходимости, поскольку JAR запускается сам по себе, без добавления основного класса в качестве параметра. На целевом компьютере Windows приложение не запускается из-за ClassNotFoundException (основной класс, который я указал).
Вот мой jwrapper.xml:
<JWrapper>
<!-- The name of the app bundle -->
<BundleName>MyApp</BundleName>
<!-- The specification for one app within the bundle -->
<App>
<Name>MyApp</Name>
<MainClass>main.Main</MainClass>
<LogoPNG>AppIcon.png</LogoPNG>
</App>
<SupportedLanguages>en</SupportedLanguages>
<SplashPNG>AppIcon.png</SplashPNG>
<BundleLogoPNG>AppIcon.png</BundleLogoPNG>
<!-- App is a per-user app, it won't elevate and install for all users and the shared config folder will be per-user -->
<InstallType>CurrentUser</InstallType>
<!-- The JREs JWrapper should use for Windows, Linux32, Linux64... -->
<Windows32JRE>JREs/windows-x86-jre1.8.0_60</Windows32JRE>
<Windows64JRE>JREs/windows-x64-jre1.8.0_60</Windows64JRE>
<Linux32JRE>JREs/linux-x32-jre1.8.0_60</Linux32JRE>
<Linux64JRE>JREs/linux-x64-jre1.8.0_60</Linux64JRE>
<Mac64JRE>JREs/osx-x64-jre1.8.0_60.jre</Mac64JRE>
<!-- The files that the app wants to bundle, here we have just one which is a JAR file and we specify that it should be on the launch classpath -->
<File classpath='yes'>MyApp.one-jar.jar</File>
<!-- Skip OSX -->
<SkipMacOS>true</SkipMacOS>
<SkipLinux>true</SkipLinux>
</JWrapper>
Как мне запустить один JAR с Jwrapper?
1 ответ
JWrapper не читает манифест из класса, поэтому вам нужно указать основной класс для его запуска. Если вы не знаете, что такое основной класс, вы можете разархивировать банку с помощью стандартного инструмента zip (вы можете переименовать его в.zip, если это необходимо), а затем открыть файл MANIFEST в текстовом редакторе (например, в блокноте), он укажет основной класс в одной из строк, и вы можете поместить это в JWrapper.