如何用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 ++(我保证)
- 启动Notepad ++并创建文件HelloWorldSWT.java
- 从作者复制示例
- 保存!
- 打开cmd并转到HelloWorldSWT.java目录
-
运行命令
javac HelloWorldSWT.java
-
好的,转到Eclipse目录并找到正确的jar
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`
注意:我添加当前目录。 到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了