Что делает флаг dynamic.classpath? (Настройки проекта IntelliJ)

В файле .idea/workspace.xml можно найти следующее:

<component name="PropertiesComponent">
  ...
  <property name="dynamic.classpath" value="false" />
</component>

Какова цель флага dynamic.classpath?

Установление его в true является обходным путем для ошибки IntelliJ. Но мне также интересно, есть ли у него какие-либо побочные эффекты.

Ответ 1

Эта опция определяет, как путь к классам передается в JVM: через командную строку или через файл. В большинстве операционных систем максимальный лимит командной строки, когда он превышен, IDEA не сможет запускать ваше приложение.

Когда командная строка длиннее 32768 символов, IDEA предлагает вам перейти на динамический путь к классам. Длинный путь пути записывается в файл, затем считывается приложением запуска и загружается через системный загрузчик классов.

Если вас интересуют детали реализации, вы можете проверить исходный код сообщества сообщества IDEA, JdkUtil.java, setupJVMCommandLine.

Ответ 2

Побочным эффектом с IntelliJ 9.0.4 является то, что после включения опции путь класса больше не завершен.

В моем случае опция была включена после выбора "да" в диалоговом окне ошибки при запуске всех модульных тестов в определенном пакете. Сообщение об ошибке гласит: "Командная строка слишком длинная. Чтобы уменьшить ее длину, можно использовать файл pathpath. Не хотите ли включить режим файла classpath для всех конфигураций запуска вашего проекта?"

После этого некоторые тесты потерпели неудачу, потому что необходимые классы из других модулей, которые отсутствовали в пути к классам.

Я не нашел диалогового окна, где я мог бы его вернуть. Мне пришлось вручную отредактировать файл .iws и переключить параметр dynamic.classpath на "false".