从命令行编译.java文件 - 外部库,类路径

3

我在Eclipse中创建了一个项目,现在正在尝试确保从命令行编译.java文件。我一直在尝试使用javac *.java在包含所有.java文件的文件夹中编译。然而,由于引用外部库Joda-time的类,这导致错误。我有以下Eclipse为该项目创建的.classpath文件,但不知道该怎么办。

    <?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 操作系统。

2个回答

11

根据您的.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 项目使用这些工具在命令行和自动化构建系统、持续集成等方面构建产品。


谢谢,这个可行。我也感谢对.classpath文件的解释。 - false_azure
我要做类似的运行吗?java -cp bin packagename.classname 运行程序,但是我需要指定另一个classpath参数来包含库吗? - false_azure
忽略之前的评论,我已经解决了。只需要用分号分隔路径即可。 - false_azure

1
Eclipse基本上会编译您的程序并将其放在bin文件夹中。而命令行则在同一目录中进行编译。如果您正在src文件夹中编译文件,则会发现它现在被零散地填满了.class文件。在Eclipse中,Java编译器的默认目录是您的项目。对于命令行,它是源文件所在的文件夹。
因此,如果您在桌面上有一个名为Project的项目,则由于Eclipse对Project\src中的源文件的默认目录,路径为C:\Users\UserName\Desktop\Project。但是,如果您使用命令行编译它,则默认目录为C:\Users\UserName\Desktop\Project\src。
要以编程方式获取当前默认目录,请使用以下内容:
System.out.println("System.getProperty ("user.dir")");
现在,如果您需要使用命令行编译,我建议您将.jar文件放在src文件夹中。
然而,我认为你不需要 .classpath 文件。这里 是它的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接