2013-10-03 54 views
0

爲什麼不按照以下命令工作?Java類編譯器在類路徑上沒有看到軟件包

$ 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 

如何教這個編譯器看看包嗎?

UPDATE

代碼是不是我的,這是正方體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 

UPDATE 2

我發現這個發生如果存在於類路徑參數JAR。

更新3

我意識到,如果一個冒號將會分離路徑,那麼Windows/DOS盤符無法處理。因此,用冒號分隔是錯誤的。

解決

這是Cygwin的/ Java的不兼容。 Windows'Java使用分號分隔路徑,而linux和makefile則使用linux-style,即冒號。所以它不在cygwin下工作。即使在makefile中將冒號替換爲分號也不能解決問題。

只提取所有JAR內容到單個純文本目錄中。

+0

你能顯示你的包結構和你的'pwd'嗎? –

+0

嗯,'make' for Java?它不構建?也許爲Java編寫的構建更可能工作。 –

+0

'pwd'不相關,但我可以說它很長;可能會發生一些截斷? –

回答

1

您忘記了您的類路徑中的當前目錄".",因此javac甚至沒有搜索到正確的路徑。

包括在-classpath

$ javac -encoding UTF8 -classpath ./piccolo-1.2.jar:./piccolox-1.2.jar:. com/google/scrollview/ui/SVAbstractMenuItem.java 
+0

我試了一下,結果是一樣的 –

+0

你自己試過了嗎? –

+0

我假設你使用的是直接使用Unix或Linux的'$'提示符。由於cygwin在Windows上運行,因此可能需要Windows路徑分隔符。嘗試';'作爲路徑分隔符而不是':'。 – rgettman

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' 

也看到這個職位: setting multiple jar files as classpath in cygwin

0

經過多次試驗是在路徑只有 和分號分隔開始的轉義反斜線我發現了什麼工作。

export CLASSPATH=C:\\Users/username/bla/bla.jar;C:\\Users/username/bla/bla.jar 
相關問題