3

我在Eclipse中创建了一个项目,现在正在尝试确保从命令行编译.java文件。我一直在试图使用我的所有.java文件在文件夹中使用javac *.java进行编译。但是,这会导致错误,因为引用外部库Joda-time中的类。我有以下为项目制作的.classpath文件,但不知道如何处理它。从命令行编译.java文件 - 外部库,类路径

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> 
    <classpathentry kind="lib" path="libs/joda-time-2.2.jar"/> 
    <classpathentry kind="output" path="bin"/> 
</classpath> 

我试着编译javac -classpath *.java,但这只会产生更多的错误。我的源文件位于'src'文件夹内的包文件夹内。我把我的classpath文件和我的joda-time-2.2.jar文件放在哪里,以及如何让所有东西都能编译?

[编辑]我使用Windows 7

回答

9

.classpath文件来看,这可能工作:

javac -d bin -cp libs/joda-time-2.2.jar src/your/package/*.java 

这里假设你在你的项目的目录中运行它。

-d标志告诉javac将输出文件放在哪里。 -cp标志是-classpath的简写。我在你的问题中得到了基于.classpath文件的这些参数。

通常,您可以通过阅读并理解javac输出中的错误来了解需要什么。我敢打赌,起初你有很多cannot find symbol错误,因为“符号”不在你的类路径中,所以javac不可能知道如何找到它们。

了解如何构建项目非常重要,它是程序员的基础知识和核心能力。

一旦你明白了如何以这种方式手动构建,我建议查看构建工具,最好是Maven,或者Ant,这样可以使命令行上的构建变得更容易。大多数Java项目都使用这些工具在命令行和自动构建系统中构建产品,持续集成等等。

+0

谢谢,这工作。我也很欣赏.classpath文件的解释。 –

+0

我会做类似的事情吗? java -cp bin packagename.classname运行程序,但是我指定了另一个classpath参数来包含库吗? –

+0

忽略以前的评论,我想明白了。只需要用分号分隔路径。 –

1

基本的Eclipse编译你的程序,并将它们在bin文件夹中。命令行将其编译到同一目录中。如果您正在编译src文件夹中的文件,您会发现它现在已经散布了.class文件。 Eclipse中Java编译器的默认目录是您的项目。对于命令行,它是源文件所在的文件夹。

所以,如果你有一个叫做Project项目上你Desktop,那么默认的,因为Eclipse在Project\src目录中源文件是C:\Users\UserName\Desktop\Project,但如果你用命令行编译它,则默认目录为C:\Users\UserName\Desktop\Project\src

以编程方式获取当前的默认目录,使用:

System.out.println("System.getProperty ("user.dir")");

现在,如果你需要使用命令行编译,我会建议你把.jar文件在你src文件夹中。

但是,我不认为你需要.classpath文件。 Here就是这样。