【发布时间】:2013-10-03 19:48:36
【问题描述】:
为什么以下命令不起作用?
$ 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 内容提取到单个普通目录中会有所帮助。
【问题讨论】:
-
你能展示你的包结构和你的
pwd吗? -
嗯,
make用于 Java?它不建立?也许为 Java 编写的构建更有可能工作。 -
pwd无关紧要,但我可以说它很长;可能会发生一些截断? -
@PeterLawrey 它也不能按原样运行,不仅来自 make
-
@SuzanCioc 这就是为什么我使用 IDE 来确保路径正确并使用 maven 进行构建,而我永远不需要担心这些问题。
标签: java cygwin classpath javac