Итак, моя проблема вкратце такова:
Я хочу запустить свою программу на основе eclipse с определенным файлом config.ini, который не в каталоге по умолчанию, т.е. это не в ../eclipse/configuration/config.ini
, но в то же время я хочу, чтобы область конфигурации находилась в другом месте, домашнем каталоге пользователей.
Причины связаны с использованием нескольких различных файлов config.ini, а область конфигурации, в которой хранятся файлы, доступна только для чтения.
При запуске инструмента с помощью
${JAVA_HOME}/bin/java
-Dosgi.baseConfiguration.area=$INSTALLATION/$CONFIGURATION/eclipse/configuration\
-jar $INSTALLATION/eclipse/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar \
и это в моем config.ini (среди прочего):
osgi.configuration.area=@user.home/tmp/eclipse_data/
Я получаю почти все, что хочу:Используется правильный файл config.ini, инструмент начинает кешировать данные в нужное место и только там.Но с небольшим недостатком, что инструмент не запускается ... Я получаю сообщение об ошибке:
!ENTRY org.eclipse.osgi 4 0 2010-11-29 19:17:06.914
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
Если я перехожу на
${JAVA_HOME}/bin/java -Dawt.toolkit=sun.awt.X11.XToolkit \
-Dosgi.configuration.area=$INSTALLATION/$CONFIGURATION/eclipse/configuration \
-jar $INSTALLATION/eclipse/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar \
инструментработает, но начинает сохранять данные в мою защищенную от записи область.
Это не проблема с определением комплекта в моем файле config.ini, так как они работают во втором сценарии.
Для этого есть несколько способов, но сначала я попробуючтобы увидеть, есть ли способ сделать эту работу, как мы хотим в первую очередь.
Обновление: Следуя предложенному Канесом предложению ниже, я обнаружил, что загружается только один пакет, org.eclipse.osgi_3.6.0.v20100517
.Когда я изучил код затмения в grepcode , который выдает исключение, я обнаружил следующую строку:
if (failOnNoDefault && runnable == null)
throw new IllegalStateException(EclipseAdaptorMsg.ECLIPSE_STARTUP_ERROR_NO_APPLICATION);
Итак, мой runnable равен нулю.Не знаю почему, но я думаю, что это признак того, что я должен использовать какой-то обходной путь.