如何在Eclipse中运行Javac

6
我试图在Eclipse中对编译后的.class文件运行"javac"工具。我打开“外部工具配置”,然后填写以下字段: 位置:C:\ Program Files \ Java \ jdk1.6.0_25 \ bin \ javac.exe 工作目录:${workspace_loc:/Main/bin} 参数:
我想问你在参数字段中必须写什么,我是否正确填写了位置工作目录字段?

在你的问题中有两个地方提到了javac,但其他地方又提到了javah。请澄清一下。 - Jon Skeet
2
javac被用于生成.class文件,而不是在其上运行! - Arne Deutsch
你为什么想要运行javac?Eclipse自带一个内置编译器,可以在你编辑文件时自动编译项目。 - Prakash G. R.
因为这两个编译器的行为不总是相同的。请参见http://stackoverflow.com/search?q=[eclipse]+javac,其中有几个例子 :) - Tyler
不用担心。我可以向您保证,当这两个行为有所不同时,大多数情况下是Sun编译器的一个错误。 - Prakash G. R.
然而,即使这是Sun的问题,它也没有太大的帮助。有些CI构建环境即使希望使用Eclipse的编译器也无法更改。 - StephMW
3个回答

14

在某些情况下(例如用于测试目的,将javac输出与Eclipse编译器的输出进行比较,使用特殊的javac编译器选项或不同JDK版本的编译器重新编译单个类文件等),从Eclipse中启动javac编译器可能是一个非常有用的功能。除了使用Ant之外,将javac集成到Eclipse中有两种方便的方法:设置javac的“外部工具配置”或将javac添加到项目的Eclipse构建链中。

设置javac的“外部工具配置”

以下是设置javac编译器以便在Eclipse中使用的步骤(准备就绪的启动配置如下):

  1. 创建一个新的外部工具配置
  2. 将配置的“位置”设置为javac可执行文件的路径(例如:C:\Program Files (x86)\Java\jdk1.7.0_25\bin\javac.exe)。
  3. 将javac的“-classpath”选项设置为“Arguments”字段中项目的类路径(例如:-classpath ${project_classpath})。
  4. 将javac的“-d”选项设置为项目的二进制文件夹(例如:-d ${project_loc}\bin)。
  5. 将任何其他javac选项,如“-verbose”或“-parameters”添加到参数列表中。
  6. 将源文件或源文件夹的路径添加到参数列表的末尾(例如:${selected_resource_loc}表示所选源文件,${selected_resource_loc}\*表示所选包)。完整的“Arguments”字段可能看起来像这样:-verbose -classpath ${project_classpath} -d ${project_loc}\bin ${selected_resource_loc}\*
  7. 在选定的文件上运行外部工具配置

此外,您可能希望在工具配置的“刷新”选项卡下选择对所选项目进行“完成后刷新资源”,并可能取消选择“启动前构建”选项卡下的“构建”。

我创建了两个默认的javac启动配置,您可以通过将它们放入以“.launch”结尾的文件中(例如“javac.launch”)来重用它们,并将该文件放入您的项目文件夹中。一旦打开“外部工具配置”对话框,Eclipse将自动检测到这些配置文件。您很可能需要将javac的位置更改为计算机上javac的位置。

文件“javac(verbose file).launch” - 使用“-verbose”选项在单个选定文件上启动javac:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${none}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="C:\Program Files (x86)\Java\jdk1.8.0\bin\javac.exe"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=" -verbose -classpath ${project_classpath} -d ${project_loc}\bin ${selected_resource_loc}"/>
</launchConfiguration>

文件 "javac (dir).launch" - 在所选包上启动 javac:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${none}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="C:\Program Files (x86)\Java\jdk1.8.0\bin\javac.exe"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-classpath ${project_classpath} -d ${project_loc}\bin ${selected_resource_loc}\*"/>
</launchConfiguration>

将javac添加到Eclipse项目的构建链中

向构建链中添加javac,以便在完整或自动构建期间自动执行,可以按照以下方式执行:

  1. 打开项目属性并选择“Builders”选项卡。如果您已经有了一个针对javac的启动配置(如上所述),则可以将其“导入...”作为新的构建器。否则,您可以为javac创建一个“新…”构建器。
  2. 您很可能想要更改javac的参数以适合您的需求。首先,您应该将“-d”参数更改为构建项目的二进制文件夹:-d ${build_project}\bin。然后,您应该使用“${resource_loc}”变量将要由javac编译的源文件/文件夹添加到参数列表的末尾。编译单个源文件的完整参数列表可能如下所示:-classpath ${project_classpath} -d ${build_project}\bin ${resource_loc:MyProject/src/myPackage/MyClass.java}。要编译完整软件包,可以写成: ${resource_loc:MyProject/src/myPackage}\*
  3. 选择“Build Options”选项卡以配置何时运行javac构建器。您可能希望取消选择“清除后”。
  4. 如果您只想在JDT编译器之上为某些源文件添加javac作为额外的编译器,则已经完成。如果您完全想要替换JDT编译器,则必须取消选择“Java Builder”选项卡中的选项,并且可能需要向构建链添加一个新工具,以执行所构建的清除操作(否则类文件将不会在构建期间被删除)。

可能需要补充说明的是,如果这些变量中包含空格(比如工作区文件夹名称),那么你必须在它们周围加上引号。无论如何,始终使用引号应该是安全的:-classpath "${project_classpath}" -d "${project_loc}\bin" "${selected_resource_loc}" - user1803551
另外,我认为${selected_resource_loc}\*中不需要\*。如果您只是选择文件并启动,则所选资源位置包括该文件,添加\*将导致错误。也许您正在以不同的方式使用它? - user1803551

0

创建Java应用程序启动配置

在运行配置中的“主”选项卡中,您可以指定要运行的主类。

在运行配置中的“参数”选项卡中,您可以指定传递到主类的参数。只需在此处输入您的输入参数,每个参数都由空格分隔(例如arg1 arg2 arg3将这3个参数传递给您的主类)。您还可以使用Eclipse预定义变量folder_promptfile_promptstring_prompt来参数化参数(您可以使用参数选项卡内的“变量...”按钮来帮助您配置它们)。当您运行主类时,Eclipse将提示对话框让您输入参数。

在运行配置中的“JRE”选项卡中,您可以指定要执行主类的JRE。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接