【问题标题】:Java cannot find symbol error even though have verified classpath and .class file with javap即使使用 javap 验证了类路径和 .class 文件,Java 也找不到符号错误
【发布时间】:2012-12-17 02:54:53
【问题描述】:

我正在使用 Maven 构建并收到一个看似无害的“未找到符号”错误 - 问题是我已经用我知道的所有较低级别的 Java 工具验证了构建是正确的,而且它看起来很密封。我已经用这个命令行构建了:

javac -d /home/dan/EmailClient/Initial-Client/target/classes -classpath <many jars>:
/thepath/Common/1.0-SNAPSHOT/Common-1.0-SNAPSHOT.jar  /* I need this one */
-sourcepath /thepath/src/main/java: <the files> 
-s /thepath/target/generated-sources/annotations 
-g -nowarn -target 1.7 -source 1.7 -encoding UTF-8

得到这个错误:

Launcher.java:119: error: cannot find symbol
    return Promise.onPool(getterPool).continueWith(new Transformer<Void, Promise<List<Void>>>() {

(错误指向onPool

并且已经运行jar xf Common-1.0-SNAPSHOT.jarcding 通过在命令行中复制和粘贴目录),然后

javap Promise.class

显示

  public static me.unroll.functional.Promise<java.lang.Void> onPool(java.util.concurrent.Executor);

所以这在我看来是无懈可击的 - 我缺少什么调试步骤?

此外,这可以在单独的机器上正常构建,并且可以在 Eclipse 中正常运行,并打开所有相关的源文件,而不是从我的实际构建机器上运行。

【问题讨论】:

  • 也许是个愚蠢的问题,但 getterPool 是 Executor 类型的吗?如果不是,那么它可能会抱怨,因为它找不到接受任何与“getterPool”匹配的参数类型的 onPool。

标签: java jar classpath


【解决方案1】:

我建议您检查类路径中的 &lt;many jars&gt; 部分,您可能会在其中找到旧版本的 Maven 构建的 jar,它正在赢得类名解析游戏。

【讨论】:

  • 我 grepped 了我所有代码使用的 groupId 并找到了 4 个罐子。我验证了唯一一个包含Promise 类的类符合预期。
  • 错误;我在错误的机器上这样做是正确的,这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 2013-08-20
  • 2016-05-18
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多