2016-02-18 2 views
6

Я пытаюсь запустить приложение RCP Eclipse с помощью Shell Script в OS X, используя плагин Eclipse Indigo с Java 1.6. Версия ОС 10.11.3 Сценарий выглядит следующим образом:Невозможно запустить приложение Eclipse RCP на OS X

#!/bin/bash 
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
app_cmd="\"$DIR/../Resources/jre/Contents/Home/bin/java\" 
-XstartOnFirstThread 
-Xdock:name=GS\ Risk 
-Xdock:icon=\"$DIR/../Resources/AppIcon.ico\" 
-Dorg.eclipse.swt.internal.carbon.smallFonts 
-Dosgi.console.enable.builtin=true 
-jar \"$DIR/../Resources/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar\" 
-data @noDefault 
-Dfile.encoding=UTF-8 
-os macosx 
-ws cocoa 
-arch x86_64 
-nl en_US 
-consoleLog 
-console 
-showsplash 
AppName" 

runCommand() { 
    typeset cmnd="$*" 
    typeset ret_code 
    echo cmnd=$cmnd 
    eval $cmnd 
    ret_code=$? 
    case $ret_code in 
    0) 
     printf "[%s] exit OK." "$NAME" 
     ;; 
    23) 
     printf "[%s] requested a restart. Restarting..." "$NAME" r 
     unCommand "$cmnd" 
     ;; 
    *) 
     printf "Error : [%d] when executing command: '$cmnd'" $ret_code 
     ;; 
    esac 
    printf "\n" 
    exit $ret_code 
} 

runCommand "$app_cmd" 

Я получаю следующее сообщение об ошибке:

!SESSION Thu Feb 18 21:50:11 GMT+05:30 2016 ------------------------------------ 
!ENTRY org.eclipse.equinox.launcher 4 0 2016-02-18 21:50:11.660 
!MESSAGE Exception launching the Eclipse Platform: 
!STACK 
java.lang.RuntimeException: Could not find framework 
    at org.eclipse.equinox.launcher.Main.getBootPath(Main.java:978) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:557) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1410) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1386) 

Что может быть причиной?

+0

Это дает ту же ошибку и каким-то образом использует систему vm, даже если я обновляю plist или ini-файл. Приложение должно использовать конкретный jre –

+0

Попробуйте разархивировать ваши файлы с помощью другого инструмента и проверьте свои пути, папки + имена файлов .... Источник: https://www.eclipse.org/forums/index.php/t/ 24093/ – Joda

+0

Нет почтового индекса. Я пытаюсь создать установщик –

ответ

2

Похоже, проблема заключается в том, что выполняется команда Java, а не с кодом Bash, который ее запускает, но код Bash имеет проблемы, которые затрудняют отладку. Одна из проблем заключается в том, что строка используется для хранения команды, параметров и аргументов. Это, как правило, плохая идея, потому что это затрудняет устранение проблем с расширением пути (globbing) и разбиением слов. Другая проблема заключается в использовании eval, чего лучше избегать и редко необходимо. Это слегка измененный вариант кода, который использует массивы для хранения команды и не использует «Eval»:

#!/bin/bash 

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

app_cmd_parts=(
    "$DIR/../Resources/jre/Contents/Home/bin/java" 
    -XstartOnFirstThread 
    -Xdock:name='GS Risk' 
    -Xdock:icon="$DIR/../Resources/AppIcon.ico" 
    -Dorg.eclipse.swt.internal.carbon.smallFonts 
    -Dosgi.console.enable.builtin=true 
    -jar "$DIR/../Resources/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar" 
    -data @noDefault 
    -Dfile.encoding=UTF-8 
    -os macosx 
    -ws cocoa 
    -arch x86_64 
    -nl en_US 
    -consoleLog 
    -console 
    -showsplash 
    AppName 
) 

runCommand() { 
    typeset cmd_parts=("[email protected]") 
    typeset ret_code 
    printf 'cmd_parts=(' 
    printf ' %q' "${cmd_parts[@]}" 
    printf ')\n' 
    "${cmd_parts[@]}" 
    ret_code=$? 
    case $ret_code in 
    0) 
     printf "[%s] exit OK." "$NAME" 
     ;; 
    23) 
     printf "[%s] requested a restart. Restarting..." "$NAME" runCommand "${cmd_parts[*]}" 
     ;; 
    *) 
     printf "Error : [%d] when executing command: '${cmd_parts[*]}'" $ret_code 
     ;; 
    esac 
    printf "\n" 
    exit $ret_code 
} 

runCommand "${app_cmd_parts[@]}" 

Это должно быть легче для отладки. Запустите его с bash -x, чтобы увидеть, что именно он делает. Скопируйте и вставьте текст между скобками в выводе cmd_parts=(...), чтобы повторно запустить команду Java, в которой запускалась программа. Надеюсь, это позволит вам определить, что не так с командой, и как ее исправить.

+0

Ну * кто-то * прочитайте часто задаваемые вопросы 50! – miken32

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