为什么以下命令不起作用?
$ javac -encoding UTF8 -classpath ./piccolo-1.2.jar:./piccolox-1.2.jar com/google/scrollview/ui/SVAbstractMenuItem.java
它会产生多个错误,例如
com\google\scrollview\ui\SVAbstractMenuItem.java:22: package com.google.scrollview.events does not exist
import com.google.scrollview.events.SVEventType;
^
这是文件 SVAbstractMenuItem.java 第 22 行中的真实代码,但警告语句是错误的,因为包存在:
$ ls com/google/scrollview/events/
Makefile Makefile.am Makefile.in SVEvent.java SVEventHandler.java SVEventType.java
如何教这个编译器查看包?
更新
代码不是我的,这是来自 tesseract 的 makefile,我正在尝试在 cygwin 下运行它。一切看起来都是正确的。
包括当前目录给出相同的结果:
$ javac -encoding UTF8 -classpath ./piccolo-1.2.jar:./piccolox-1.2.jar:. com/google/scrollview/ui/SVAbstractMenuItem.java
com\google\scrollview\ui\SVAbstractMenuItem.java:22: package com.google.scrollview.events does not exist
import com.google.scrollview.events.SVEventType;
^
com\google\scrollview\ui\SVAbstractMenuItem.java:56: cannot find symbol
symbol : class SVWindow
location: class com.google.scrollview.ui.SVAbstractMenuItem
public void performAction(SVWindow window, SVEventType eventType) {}
^
com\google\scrollview\ui\SVAbstractMenuItem.java:56: cannot find symbol
symbol : class SVEventType
location: class com.google.scrollview.ui.SVAbstractMenuItem
public void performAction(SVWindow window, SVEventType eventType) {}
^
3 errors
更新 2
如果类路径参数中存在 JAR,我发现会发生这种情况。
更新 3
我意识到如果冒号分隔路径,则无法处理 Windows/DOS 驱动器号。因此,用冒号分隔是错误的。
解决了
这是 Cygwin/Java 不兼容。Windows 的 Java 使用分号分隔路径,而 linux 和 makefile 则使用 linux 样式,即冒号。所以它在cygwin下不起作用。即使在makefile中将冒号替换为分号也不能解决问题。
只有将所有 jars 内容提取到单个普通目录中才有帮助。