如何在Java中编译.java文件?
我有以下由Eclipse生成的代码(.java文件)。如何在Java中编译.java文件?
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Display;
public class HelloWorldSWT {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Hello world!");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
现在我想从命令行编译上述文件。我去到源代码所在的目录,我试过两个命令:
1. javac的HelloWorldSWT.java
2. javac的-d /家庭/ MYNAME /工作区/ HelloWorldSWT.java
在这两种情况下,我有同样的错误“导入org.eclipse无法解析”。 /home/myname/workspace/- 是类文件所在的目录。
据我了解,编译器没有看到org.eclipse.swt包。为什么?
难道是因为有问题的软件包位于“/home/myname/workspace/org.eclipse.swt/”(不在“/ home/myname/workspace/org/eclipse/swt /”中)吗?
您需要设置类路径以便Java编译器知道在哪里可以找到org.eclipse。*类。您可以使用命令行开关或环境变量来完成此操作。
但我虽然在编译过程中指定了“classpath”(使用-d选项)。我虽然在“-d”选项后面加上了我所有软件包所在目录的名称。我理解错吗? – Roman 2010-02-17 09:22:45
Roman -/d是编译类(即.class文件)去的地方... 可以使用CLASSPATH环境变量或使用-classpath选项来设置类路径(不是Java乐趣?的javac程序。 – 2010-02-17 09:32:17
谢谢你,马丁。现在对我来说更清楚了。但是,当我尝试“javac -d/home/myname/workspace/HelloWorldSWT/-classpath/home/myname/workspace/HelloWorldSWT.java”时,仍然收到相同的错误消息。 – Roman 2010-02-17 09:45:33
由于您正在进行Eclipse RCP开发,因此您应该让Eclipse处理您的编译。 (您很可能会在项目的“build”或“bin”目录中找到您的课程)。 除了编译之外,还会有一些“打包”步骤来创建最终的应用程序,Eclipse也有相应的工具。
如果你真的想在Eclipse之外构建,你需要管理一个潜在的大型依赖列表(比如org.eclipse.swt.widgets),这使得纯javac不可行。你需要看看Ant或Maven。
另请注意,您将需要类路径来包含不仅用于编译的依赖项,还包括运行该程序时的依赖项。
但是为了理解java中的classpath /依赖机制,从shell完全编译是最好的方法。并使用Notepad ++作为IDE - ) – 2010-02-17 09:21:57
许多人说我会在“build”或“bin”中找到我的类。但是我在/ home/myname/workspace/HelloWorldSWT /中找到了我的类文件。或者我们在谈论不同的事情?在我的简单情况下,依赖关系问题可能会很大吗?我只想要javac看到一个包(org.eclipse)? – Roman 2010-02-17 09:27:56
为了学习classpath /依赖项问题,也许SWT项目不是一个好的开始... – Thilo 2010-02-17 09:38:41
但是我虽然我指定的编译 (使用-d选项)在 “类路径”。我虽然那 “-d”选项后,我把 目录的名称,我的所有包是 位于。我理解错吗?
尝试
javac -help
,看看有什么不同的命令行选项做。还请注意上面的其他帖子解释了这一点。
从命令行编译并设置类路径和一切正确是一个痛苦。然而,这样做很有用,这样你就可以理解ide在为你自动实现时实际做了什么。
感谢。我有这个想法。 -d指定在编译过程中生成的类文件应该到的目录。 -classpath指定软件包所在的目录。但是当我使用“javac -d/home/myname/workspace/HelloWorldSWT/-classpath/home/myname/workspace/HelloWorldSWT.java”时,我仍然收到旧的错误信息。 – Roman 2010-02-17 09:50:54
类路径变量或命令行开关需要指向其中org.eclipse.swt.widgets.Shell
类驻留,如果该类是一个JAR文件中,那么类路径需要包含实际的jar文件,
即javac -classpath /root/to/jar/eclipse.jar
否则,如果org.eclipse.swt.widgets.Shell类只是一个松散的类文件(我怀疑,我认为这将是里面的eclipse jar文件,一个你可以使用jar -tvf jar-you-think-it-might-be-in.jar
列出) ...那么您将需要javac -classpath指向org/eclipse/swt/widgets/
路径中*目录的位置。
@罗曼 - 这个问题对于初学者来说太复杂了,试图解决。问题在于SWT具有复杂的依赖关系,包括对本地代码库的依赖。
您最好使用Eclipse“RunAs”运行您的SWT应用程序......或尝试从命令行查找一些运行基于SWT的应用程序的特定于Eclipse的文档。
Stephen,我能够从Eclipse运行应用程序。我只是设法编译类文件(通过javac -d/home/myname/workspace/HelloWorldSWT/-cp /home/myname/workspace/org.eclipse.swt/swt.jar)。但我仍然不知道如何运行生成的类文件(但它已经是另一个问题了)。 – Roman 2010-02-17 10:10:32
@罗曼 - 运行它是最难的部分。 – 2010-02-17 10:18:59
好的,Stephen C 我是亲手做这个工作的。 我只用记事本+ +(我发誓)
- 启动记事本++和作者
- 创建文件HelloWorldSWT.java
- 复印实例保存它!
- 打开CMD,进入到目录中HelloWorldSWT.java
运行命令
javac HelloWorldSWT.java
好了,去到Eclipse目录,找到正确的罐子
swt-3.4.2-win32-win32-x86.jar
-
运行此再次
D:\workspaces\spf_workspace\hand-made>javac -cp "D:\Program files\eclipse3_5\plugins\org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar" HelloWorldSWT.java
所有过程需要2分钟。
不要尝试运行此:
`D:\workspaces\spf_workspace\hand-made>java -cp "D:\Program files\eclipse3_5\plugins\org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar;." HelloWorldSWT`
注:我补充当前目录。到类路径。
如果你这样运行,SWT将如何找到它的本地(JNI)库? – 2010-02-17 10:57:37
org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar包含本地dll,并在运行时将其解压缩到系统tmp dir(默认情况下,java使用system tmp作为默认本地库的占位符) – 2010-02-17 11:01:46
我知道这是一个严重的问题,但我只是要指出一个欢闹的冠冕堂皇的标题“如何在Java中编译.java文件?”是。 – 2016-10-01 01:41:03