【问题标题】:java : cannot resolve symboljava:无法解析符号
【发布时间】:2009-10-13 21:48:55
【问题描述】:

我正在编译一个 JAVA ( 1.4 varsion ) 文件并收到以下错误 (大约 100 次都是相同的)。

Appli.java:721: cannot resolve symbol
symbol  : class License
location: class test.App.Appli
            License  sellLicense = sell.getLicense();

我用过

   run/cmd/cd D:...../javac Appli.java

我已将 CLASSPATH 变量设置为我目前正在运行的 java 文件的 Classes 文件夹。

  Control panel/Settings/System/System Properties /Advanced/Environmental Variables/System Variables/ Add/CLASSPATH 

我应该使用

如何解决这个问题?

【问题讨论】:

  • 我们可以看看导致错误的代码示例吗?
  • 嗯,不是全部 721 行,而是一个示例。
  • @vas: 所以你把类放在一个单独的子树中,是吗?在这种情况下,您可能在编译之前忘记“cd”到正确的位置并且没有设置-sourcepath。你需要做一个或另一个;看我的回答。

标签: java


【解决方案1】:

在我看来,您需要使用 Appli 类编译许可证类。查看Javac Documentation 了解更多详细信息,但您可以执行以下操作:

javac Appli.java License.java

如果许可证在一个库中,您需要将该库添加到您的编译类路径中。这是通过 -classpath 标志完成的:

javac -classpath "classpath" Appli.java

【讨论】:

  • 每次执行“javac Appli.java”时我是否应该使用 javac -classpath "classpath" Appli.java
  • @vas: 是的……或者设置 $CLASSPATH,或者使用构建工具。
【解决方案2】:

您可能缺少import 声明。

【讨论】:

  • 我正在尝试运行用于生产的预先存在的代码
【解决方案3】:

您需要设置 CLASSPATH 并确保您在正确的目录中。

假设test.App.Appl试图引用test.App.License,目录结构应该是:

/somedir/test
/somedir/test/App
/somedir/test/App/Appl.java
/somedir/test/App/License.java

您应该将$CLASSPATH设置为"/somedir",然后将您的当前目录更改为/somedir并以javac test/App/*.java运行编译器;例如

$ export CLASSPATH="/somedir"
$ cd /somedir
$ javac test/App/*.java

您还可以将-cp 命令行选项与javac(以及后来的java)命令一起使用,并使用-sourcepath 选项从不同的目录运行javac 编译器。

另一种可能是License 的包不是test.App。如果是这种情况,则需要调整目录结构以匹配包命名,并在Appl 类中添加import 语句。

编辑:如果您在源代码树中注意到build.xmlpom.xml(甚至可能是Makefile),您可能不应该直接使用javacbuild.xml 用于使用 Ant 构建,一个 'pom.xmlis for Maven (or Ivy) and aMakefileormakefileis formake`。

【讨论】:

  • 设置classpath环境变量真是上千年了……最好不要设置,反正当前目录会被搜索到。
  • @Michael:实际上,他应该真的在使用 Ant 或 Maven,所以不要扯头发。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2018-11-11
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多