2015-12-27 2 views
1

Я создал папку .app, содержащую приложение Java и JRE. Я использовал плагин app-bundle-maven для создания папки .app.Запуск внешней программы, такой как hdiutil из папки .app в Mac OS X

Приложение My Java создает файл .dmg из образа ISO и делает это, запустив hdiutil в качестве подпроцесса.

Это работает без проблем при запуске из командной строки или в среде IDE, но сбой при запуске из папки .app.

ProcessBuilder выдает исключение IOException, что/usr/bin/hdiutil не найден.

Мои вопросы: есть ли папка .app, как песочница? Есть ли параметр в файле Info.plist, способный переопределить поведение песочницы?

Info.plist:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
    <key>CFBundleDevelopmentRegion</key> 
    <string>English</string> 
    <key>CFBundleExecutable</key> 
    <string>JavaAppLauncher</string> 
    <key>CFBundleIconFile</key> 
    <string>usbboot.icns</string> 
    <key>CFBundleIdentifier</key> 
    <string>de.bamamoto.mactools.usbboot.USBBoot</string> 
    <key>CFBundleDisplayName</key> 
    <string>USBBoot</string> 
    <key>CFBundleInfoDictionaryVersion</key> 
    <string>6.0</string> 
    <key>CFBundleName</key> 
    <string>USBBoot</string> 
    <key>CFBundlePackageType</key> 
    <string>APPL</string> 
    <key>CFBundleShortVersionString</key> 
    <string>1.0-SNAPSHOT</string> 
    <key>CFBundleSignature</key> 
    <string>????</string> 
    <key>CFBundleVersion</key> 
    <string>1</string> 
    <key>NSHumanReadableCopyright</key> 
    <string></string> 
    <key>NSHighResolutionCapable</key> 
    <true/> 
    <key>JVMRuntime</key> 
    <string>JRE</string> 
    <key>JVMMainClassName</key> 
    <string>de.bamamoto.mactools.usbboot.USBBoot</string> 
    <key>JVMClassPaths</key> 
    <array> 
     <string>de/bamamoto/webmusic/USBBoot/1.0-SNAPSHOT/USBBoot-1.0-SNAPSHOT.jar</string> 
    </array> 
    <key>JVMVersion</key> 
    <string>1.6+</string> 
    <key>JVMOptions</key> 
    <array> 
     <string>-Dapple.laf.useScreenMenuBar=true</string> 
     <string>-Xdock:name=USBBoot</string> 
     <string>-Djava.util.Arrays.useLegacyMergeSort=true</string> 
    </array> 
    <key>JVMArguments</key> 
    <array/> 
    <key>LauncherWorkingDirectory</key> 
    <string>$APP_ROOT</string> 
    </dict> 
</plist> 

ответ

0

Я нашел решение этой проблемы. Файл jspawnhelper, расположенный в папке JREs lib, потерял флаг выполнения во время операции копирования. Этот файл необходим при использовании вызовов метода ProcessBuilder.start() или Runtime.exec().

Исключенное исключение IOException, что исполняемый файл не был найден, вводит в заблуждение. После установки флага выполнения в этом файле все работает так, как ожидалось.

Смежные вопросы