2011-08-24 43 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。
  • 当使用分隔符(;)时,用引号括起类路径(如示例中所示)。
相关问题