动态.classpath标志是什么?(IntelliJ项目设置)

42

在文件.idea/workspace.xml中可以找到以下内容:

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

动态.classpath标志的目的是什么?

将其设置为true恰好是解决IntelliJ bug的workaround。但我也想知道它是否有任何副作用。

2个回答

44

这个选项控制将classpath传递给JVM的方式:通过命令行或文件。大多数操作系统都有最大命令行限制,当超过此限制时,IDEA就无法运行应用程序。

当命令行长度超过32768字符时,建议您切换到动态classpath。长的classpath被写入一个文件,然后由应用程序启动器读取,并通过系统类加载器加载。

如果您对实现细节感兴趣,可以查看IDEA Community版源代码中的JdkUtil.java文件的setupJVMCommandLine方法。


3
因此,如果您的应用程序或单元测试正在操纵类加载器(例如调用 URLClassLoader.getURLs() 并处理其结果)-- 那么如果 dynamic.classpathtrue,则应用程序(或测试)可能会因无明显原因而失败。 - Bass

23

在 IntelliJ 9.0.4 中的一个副作用是,启用该选项后,类路径不再完整。

在我的情况下,当我运行特定包中的所有单元测试时,选择“”,就会打开该选项。错误消息显示“命令行太长。为了缩短长度,可以使用classpath文件。您是否要为项目的所有运行配置启用classpath文件模式

此后,一些测试失败了,因为需要来自其他模块的必要类,而这些类在类路径中缺失了。

我没有找到可以切换回去的对话框。我不得不手动编辑.iws文件,并将dynamic.classpath选项切换回“false”。


我在使用IntelliJ 13.1时仍然遇到同样的问题。我已经提交了一个bug:https://youtrack.jetbrains.com/issue/IDEA-130440 - bacar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接