javac 无法在 .jar 中找到类,即使它们存在?

标签 java ant compilation compiler-errors javac

我在编译过程中包含了一个相当大的 JAR 文件,该文件是使用 Altova MapForce 生成的。 JAR 文件大约 65MB,编译工作正常。我需要添加更多映射,所以我这样做了,重新生成了我的 JAR,并尝试再次构建。 JAR 现在约为 80MB。

现在,即使我打开 JAR 来验证符号是否存在,我也会收到各种“找不到符号”错误消息!我是否达到了 JAR 大小的上限? JAR 文件中有超过 75,000 个类。

奇怪的是 Eclipse 自动完成功能在新的 JAR 中运行得很好;我只在构建时遇到这些错误。

如果这有什么区别的话,我正在使用 Ant。

谢谢

布莱恩

编辑:还有一些奇怪的事情:我打开了 javac 的详细输出。似乎在加载所有类之前我就开始出现编译错误:

[javac] [loading com\mycompany\myproject\*************************.class)]
[javac] [loading com\mycompany\myproject\*************************.class)]
[javac] [loading com\mycompany\myproject\*************************.class)]
[javac] [loading com\mycompany\myproject\*************************.class)]
[javac] [loading com\mycompany\myproject\*************************.class)]
[javac] C:\Users\*************************.java:38: cannot find symbol
[javac] symbol  : class *************************
[javac] location: package com.mycompany.myproject.*************************
[javac] import com.mycompany.myproject.*************************;
[javac]                                                      ^
[javac] [loading com\altova\TraceProvider.class(com\altova:TraceProvider.class)]
[javac] [loading com\altova\io\StringInput.class(com\altova\io:StringInput.class)]
[javac] [loading com\altova\io\StringOutput.class(com\altova\io:StringOutput.class)]

最佳答案

查看您遇到的特定编译器错误、您的类路径等会很有帮助。如果它在 eclipse 中运行而不是在 ant 中运行,则可能是类路径问题,即您的 ant 脚本未设置相同的值类路径与 Eclipse 中的项目设置相同。

我正在开发一个包含大于 80MB 的 jar 文件的项目,没有问题,而且我认为 jar 文件或类似文件中的类数量没有上限。 jar 的大小和它包含的类的数量不太可能是您的问题。

您可以尝试编写一个简单的测试主程序,仅导入有问题的类,然后使用 javac 对其进行编译,仅在类路径上使用该 jar。如果该测试不起作用,那么您就知道您使用的 jar 有问题。如果它不起作用,则必须是 Ant 问题或类似问题。

您可以发布您的 ant 构建目标以及 ant 的详细输出吗?

关于javac 无法在 .jar 中找到类,即使它们存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760980/

相关文章:

java - 缓冲读取器线程安全吗?

java - 使用 Hibernate Search 查询枚举(enum)的 IndexedEmbedded 列表

java - 如何使用List按值对Map进行排序?

ant - 如何在ant的<macrodef>中<copy>?

java - Android/Java : use method from prior SDK, 在当前 SDK 中未定义

java - 如何将 dateTime 类型转换为 gregorianCalendar

Ant 属性文件任务 : how can I set an integer with no thousand separators?

java - Ant 构建可以在一个系统上运行,而不能在另一个系统上运行

c++ - 为什么我只需要在我将开发使用 ffmpeg 库的应用程序的 PC 上直接编译 ffmpeg?

来自 JDK 1.6 的 JavaCompiler : how to write class bytes directly to byte[] array?