Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java编译.java文件?_Java_Compilation_Packages - Fatal编程技术网

如何用java编译.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包。

我有以下由Eclipse(.java文件)生成的代码

现在我想从命令行编译上面的文件。我转到源代码所在的目录,并尝试了两个命令:
一,。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目录并找到正确的jar
    swt-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`