首页 > 解决方案 > 如何在 Eclipse 中设置 ATTR_USE_CLASSPATH_ONLY_JAR 而无需编辑 Java > 8 的启动配置?

问题描述

在 Eclipse 中,可以指定从临时 JAR 引用 jar 文件以避免类路径长度限制。这可以通过在运行/调试配置中选择类路径选项卡中的复选框来实现:

在此处输入图像描述

这很好用,但是当使用大于 8 的 java 版本时,此选项不再公开,如下所示:

在此处输入图像描述

该选项卡classpath不再存在。它被选项卡取代,该Dependencies选项卡不显示此复选框。

但是,需要使用它的原因仍然存在于后 java 8 世界中。类路径可能会超过操作系统限制,尤其是在 Windows 10 环境中,该限制 (32k) 比 Mac/linux (200k+) 低得多。在 Windows 10 上,如果使用 Spring Boot 和少数其他在企业开发环境中相当标准且无处不在的技术(jackson、rx、kafka、redis、aws 等),则很容易超过此限制。

对 eclipse 错误 558495 的评论中,建议手动编辑 eclipse 启动配置,并将 key 属性的值设置org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JARtrue

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
  <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
    <listEntry value="/demoapp/src/main/java/demo/DemoApplication.java"/>
  </listAttribute>
  <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
    <listEntry value="1"/>
  </listAttribute>
  <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
  <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="true"/>
  <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="demo.DemoApplication"/>
  <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="demoapp"/>
  <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--spring.profiles.active=dev"/>
  <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="demoapp"/>
</launchConfiguration>

这行得通,但至少可以说是不方便的。每当对启动配置进行任何更改时,手动设置的值都会重置为false,因此必须打开位于<workspace>\.metadata\.plugins\org.eclipse.debug.core目录中的启动配置并再次对其进行编辑。除了不方便之外,这个过程还容易出错,而且不太理想,因为它正在修改 eclipse 正在管理的文件。

有没有办法从 eclipse 的 UI 中做到这一点?是否有其他(更好的?)方法来处理 eclipse 中的长类路径?

几个月前,我在 eclipse 的 bugzilla错误 561218中报告了这个问题,但到目前为止它没有得到任何关注。

标签: javaeclipseclasspathspring-tool-suitests

解决方案


在 Windows 中解决行长限制的临时 JAR 文件技巧可能适用于您的情况,但在使用 Java 9 或更高版本时并非适用于所有情况。

相反,从 Eclipse 2020-12 (将于 2020 年 12 月 16 日发布)开始,将支持使用@argfile的 Java 9 或更高版本。@argfile选项可以在Arguments选项卡找到。


推荐阅读