0

为什么以下命令不起作用?

$ 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 内容提取到单个普通目录中才有帮助。

4

3 回答 3

2

在 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 文件设置为类路径

于 2013-10-03T21:16:05.920 回答
1

您忘记了类路径中的当前目录".",因此javac甚至没有搜索正确的路径。

将其包含在-classpath

$ javac -encoding UTF8 -classpath ./piccolo-1.2.jar:./piccolox-1.2.jar:. com/google/scrollview/ui/SVAbstractMenuItem.java
于 2013-10-03T19:52:59.710 回答
0

经过多次试验后,我发现只有在路径开头的转义反斜杠和分号作为分隔符。

export CLASSPATH=C:\\Users/username/bla/bla.jar;C:\\Users/username/bla/bla.jar 
于 2014-02-27T15:28:25.797 回答