[英]Java compiler does not see packages if jar on classpath
为什么跟随命令不起作用?
$ 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
我发现如果classpath参数中存在JAR,就会发生这种情况。
更新3
我意识到,如果冒号分隔路径,那么Windows / DOS驱动器号将无法处理。 因此,用冒号分隔是错误的。
解决了
这是Cygwin / Java不兼容。 Windows的Java使用分号分隔路径,而linux和makefiles扩展linux样式,即冒号。 因此,在Cygwin下无法正常工作。 即使将makefile中的冒号替换为分号也无法解决问题。
仅将所有jar内容提取到单个纯目录中是有帮助的。
在cygwin中使用javac可能很困难。 Java编译器不是cygwin,而是Windows程序。 因此,您必须使用Windows样式的路径。
因为您在类路径中使用冒号“:”,所以Windows Java编译器无法正确解释类路径。 您将必须使用分号“;” 作为类路径中的路径分隔符。 但是因为您在Unix风格的shell中;所以 终止您的命令。
无需cygwin即可编译Java源代码。 由于结果是Java类文件,所以没有关系。 或将您的参数(例如类路径)以及源文件的路径放在单引号中。
例:
javac -encoding UTF8 -classpath '.\piccolo-1.2.jar;.\piccolox-1.2.jar;.' 'com\google\scrollview\ui\SVAbstractMenuItem.java'
另请参阅此帖子: 在cygwin中将多个jar文件设置为类路径
您忘记了当前目录"."
在您的类路径中,因此javac
甚至都没有搜索正确的路径。
包括在-classpath
:
$ javac -encoding UTF8 -classpath ./piccolo-1.2.jar:./piccolox-1.2.jar:. com/google/scrollview/ui/SVAbstractMenuItem.java
经过多次试验,我发现行之有效的是仅在路径开头使用了转义的反斜杠,并使用分号作为分隔符。
export CLASSPATH=C:\\Users/username/bla/bla.jar;C:\\Users/username/bla/bla.jar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.