如何用Java编译.java文件?

我有Eclipse生成的以下代码(.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 / home / myname / workspace / 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。*类。 您可以使用命令行开关或环境变量来完成此操作。

好的, Stephen C我手工做了这个工作。 我只使用Notepad ++(我保证)

  1. 启动Notepad ++并创建文件HelloWorldSWT.java
  2. 从作者复制示例
  3. 保存!
  4. 打开cmd并转到HelloWorldSWT.java目录
  5. 运行命令javac HelloWorldSWT.java

  6. 好的,转到Eclipse目录并找到正确的jar swt-3.4.2-win32-win32-x86.jar

  7. 再次运行它

    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` 

注意:我添加当前目录。 到classpath也是。

由于您正在进行Eclipse RCP开发,因此您应该让Eclipse处理您的编译。 (您很可能会在项目的“构建”或“bin”目录中找到您的类)。 除了编译之外,还有一些“打包”步骤来创建最终的应用程序,Eclipse也有这样的工具。

如果你真的想在Eclipse之外构建,你需要管理一个潜在的大型依赖项列表(例如org.eclipse.swt.widgets),这使得纯粹的javac变得不可行。 你需要看看Ant或Maven。

另请注意,您将需要类路径以包含依赖项,不仅用于编译,还包括运行程序时的依赖项。

但我虽然在编译期间指定了“classpath”(使用-d选项)。 我虽然在“-d”选项之后我把目录的名称放在我所有的软件包所在的位置。 我错误地理解了吗?

尝试

 javac -help 

查看不同命令行选项的作用。 另请注意上面的其他post解释了这一点。

从命令行编译并设置类路径,一切都是正确的。 但是,这样做很有用,这样你就可以理解ide为你实现自动化时的实际function。

classpath变量或命令行开关需要指向org.eclipse.swt.widgets.Shell类所在的位置,如果此类在jar文件中,则classpath需要包含实际的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列出你jar -tvf jar-you-think-it-might-be-in.jar )…然后你需要javac -classpath指向org/eclipse/swt/widgets/ path中顶级目录的位置。

@Roman – 这个问题太复杂了,初学者无法尝试解决。 问题是SWT具有复杂的依赖性,包括对本机代码库的依赖性。

您最好使用Eclipse“RunAs”运行SWT应用程序…或尝试从命令行查找有关运行基于SWT的应用程序的一些特定于Eclipse的文档。

你忘了classpath了