2011-08-24 75 views
14

當我在Eclipse中我的項目編譯沒有錯誤,但是當我嘗試編譯javac它說我錯過了一些包...如何讓javac找到JAR文件? (Eclipse可以看到他們)

我複製了我的編譯命令和下面的一些錯誤的文本:

javac -classpath lib/ -d bin/ src/*.java 
src/Cleaner.java:5: package net.sourceforge.jgeocoder does not exist 
src/MyUtilities.java:19: package org.apache.commons.codec.binary does not exist 

在Eclipse中,我添加了所有.jar文件複製到構建路徑,程序編譯就好了。

爲什麼在使用javac而不是Eclipse IDE時找不到jar?

+0

由於Eclipse被*告知*在哪裏看,但javac不是:-)這裏沒有魔法。 – 2011-08-24 21:31:53

回答

15

-classpath lib/將導致javaclib中查找類文件樹。如果你有JAR檔案在那裏,你必須使用-classpath lib/*.jar - 可能使用任何逃逸機制的CLI對*,以確保它達到javac而不是通過CLI

正在擴大見javac command reference (windows)

+0

完美,那就做到了!謝謝! – theangryhornet

8

現有的答案,因爲它的信息,仍然讓我想知道,必須通過javac -classpath文檔。以下是您可能想知道的一個修訂:

javac -cp "lib/" Example.java將加載lib/中的所有.class文件。
javac -cp "lib/\*" Example.java將加載lib/中的所有.jar文件,但不加載.class文件。
javac -cp "lib/;lib/\*" Example.java將加載lib/中的所有.jar.class文件。

注:

  • 如在上述實施例中所用的*(通配符)字符被轉義(注意\*之前)。 \是bash,如果你使用別的東西,它可能會不同。你想逃避它,因爲java sdk實用程序,如javac,他們自己的解釋通配符的方式。據我所知(糾正我,如果我錯了),Windows命令行不擴大*,所以你不需要逃避它:​​應該沒問題。
  • ;分隔路徑,如javac -cp ".;a/;b/;c/" Example.java - 這將在以下目錄中加載.class文件:當前目錄,a,b和c。
  • 當使用分隔符(;)時,用引號括起類路徑(如示例中所示)。
相關問題