java - 如何在 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_JAR
为true
:
<?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中报告了这个问题,但到目前为止它没有得到任何关注。
解决方案
在 Windows 中解决行长限制的临时 JAR 文件技巧可能适用于您的情况,但在使用 Java 9 或更高版本时并非适用于所有情况。
相反,从 Eclipse 2020-12 (将于 2020 年 12 月 16 日发布)开始,将支持使用@argfile的 Java 9 或更高版本。@argfile选项可以在Arguments选项卡中找到。
推荐阅读
- python - 在列表上的元组上使用函数在 Google Colab 中有效,但在本地机器上无效
- java - 如何在 Android Studio 中使用 Spinner 获取 RecyclerView 的结果
- tinymce - 为什么 TinyMCE 需要 API 密钥?
- php - 联系表格未发送消息
- python - Selenium webdriver 消息:没有这样的元素:无法找到元素 - iFrame
- javascript - javascript过滤json并返回另一个值
- dependencies - 查找 Common Lisp 文件之间的依赖关系
- c# - 有没有办法反转文件的每 2 个字节?
- java - r2dbc 连接关闭异常
- javascript - php 和 jquery 自动 DOM 更新