如何用java编译.java文件?
我有以下由Eclipse(.java文件)生成的代码 现在我想从命令行编译上面的文件。我转到源代码所在的目录,并尝试了两个命令:如何用java编译.java文件?,java,compilation,packages,Java,Compilation,Packages,我有以下由Eclipse(.java文件)生成的代码 现在我想从命令行编译上面的文件。我转到源代码所在的目录,并尝试了两个命令: 一,。javac HelloWorldSWT.java 二,。javac-d/home/myname/workspace/HelloWorldSWT.java 在这两种情况下,我都有相同的错误“import org.eclipse无法解析”。 /home/myname/workspace/-是类文件所在的目录 据我所知,编译器没有看到org.eclipse.swt包。
一,。javac HelloWorldSWT.java
二,。javac-d/home/myname/workspace/HelloWorldSWT.java 在这两种情况下,我都有相同的错误“import org.eclipse无法解析”。 /home/myname/workspace/-是类文件所在的目录 据我所知,编译器没有看到org.eclipse.swt包。为什么?
这可能是因为有问题的包位于“/home/myname/workspace/org.eclipse.swt/”(不在“/home/myname/workspace/org/eclipse/swt/”)中吗?您需要设置类路径,以便Java编译器知道在哪里可以找到org.eclipse.*类。您可以通过命令行开关或环境变量来实现这一点。既然您正在进行Eclipse RCP开发,那么您也应该让Eclipse来处理编译。(您很可能会在项目的“build”或“bin”目录中找到您的类)。 除了编译,还将有一些“打包”步骤来创建最终的应用程序,Eclipse也有相应的工具 如果您真的想在Eclipse之外构建,您需要管理一个潜在的大量依赖项列表(例如org.Eclipse.swt.widgets),这使得纯javac变得不可行。你需要看看Ant或Maven 还请注意,您不仅需要类路径包含编译依赖项,还需要在运行程序时包含依赖项。您忘记了
但我认为我应该指定 编译过程中的“类路径” (使用-d选项)。我想那之后 我输入名称的“-d”选项 我的所有包所在的目录 位于。我理解错了吗 试一试 查看不同命令行选项的作用。还要注意上面解释这一点的另一篇文章
从命令行编译、设置类路径以及一切正确都是一件痛苦的事情。但是,这样做很有用,这样您就可以理解ide在为您实现自动化时实际做了什么 类路径变量或命令行开关需要指向
org.eclipse.swt.widgets.Shell类驻留的位置,如果该类位于jar文件中,则类路径需要包含实际的jar文件
i、 e.javac-classpath/root/to/jar/eclipse.jar
否则,如果org.eclipse.swt.widgets.Shell类只是一个松散的类文件(我对此表示怀疑,我假设它将位于一个eclipse jar文件中,您可以使用jar-tvf-jar列出它,您认为它可能位于.jar
)…然后您将需要javac-classpath指向org/eclipse/swt/widgets/
路径中顶级目录的位置。@Roman-对于初学者来说,这个问题太复杂,无法解决。问题是SWT具有复杂的依赖关系,包括对本机代码库的依赖关系
您最好使用Eclipse“RunAs”运行SWT应用程序。。。或者尝试从命令行查找一些关于运行基于SWT的应用程序的Eclipse特定文档。Ok,Stephen C
我是手工做这项工作的。
我只用记事本++(我保证)
启动记事本++并创建文件HelloWorldSWT.java
从作者处复制示例
省省吧李>
打开cmd并转到带有HelloWorldSWT.java的目录
运行命令javac HelloWorldSWT.java
好的,转到Eclipse目录并找到正确的jarswt-3.4.2-win32-win32-x86.jar
再运行一次
D:\workspaces\spf\u workspace\hand-made>javac-cp“D:\Program files\eclipse3\u 5\plugins\org.eclipse.swt.win32.win32.x86\u 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`
注意:我添加当前目录。但要理解java中的类路径/依赖机制,从shell完全编译是最好的方法。使用记事本++作为IDE-)许多人说我会在“build”或“bin”中找到我的类。但是我在/home/myname/workspace/HelloWorldSWT/中找到了我的类文件。还是我们在谈论不同的事情?在我的简单例子中,依赖性问题会很大吗?我只想让javac看到一个包(org.eclipse)?为了学习类路径/依赖性问题,也许SWT项目不是一个好的开始方式…@St Shadow-理论上是这样的。实际上,为了了解这些机制,您不应该选择像EclipseSWT/RCP这样混乱的示例。SWT项目与使用至少一个jar:)的任何项目相同,但我认为我在编译期间指定了“类路径”(使用-d选项)。我认为在“-d”选项之后,我把我的所有包所在的目录的名称放进去。我理解错了吗?Roman-d是编译类(即.class文件)的位置。。。classpath(Java不是很有趣吗?)既可以使用classpath环境变量设置,也可以使用javac程序的-classpath选项设置。谢谢你,Martin。现在我更清楚了。但是,当我尝试“javac-d/home/myname/workspace/HelloWorldSWT/-classpath/home/myname/workspace/HelloWorldSWT.java”时,仍然会收到相同的错误消息。我猜它是org.eclipse.*类文件不在您的目录中,而是在eclipse安装的插件目录中。但祝你们好运,在那个目录中的大约100个JAR文件中,你们到底需要哪一个!但是我认为我在编译期间指定了“classpath”(使用-d选项)。我认为在“-d”选项之后,我把我的所有包所在的目录的名称放进去。我理解错了吗?是的,你理解错了。通过-cp选项指定类路径:javac
javac -help
`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`