为什么我在不同的eclipse项目中获得不同的java版本?

时间:2014-03-06 01:12:55

标签: java eclipse

我实际上在点击“发布”按钮之前找到了我的问题的答案,但这对我来说非常令人沮丧,我正在发布它,希望它能帮助别人。 答案如下。

我正在使用Eclipse Kepler,它是用Java 1.7构建的(但我认为这不会在本期中发挥作用)。我的问题是我最终会在不同的项目中使用不同版本的java。

我有几个相关项目,我称之为BV_S,BV_A和BV_L。在我接手这项工作之前,设置了一个丑陋的Subversion外部设备,以便BV_A和BV_L项目各自从BV_S项目的内部深处引入一些java源文件。为了清理这一点,我决定将所有共享源提取出来并创建一个新的BV_Common项目,该项目将创建一个BV_Common.jar文件,然后我将使用该.jar来构建三个现有项目中的每一个。从历史上看,这些项目使用了Java 1.5和1.6的混合体。我的目的是用1.6做一切。

我已创建BV_Common.jar文件,将其检入Subversion,并在其他项目中设置Subversion外部属性,以便此.jar文件在每个BV_S,BV_A和BV_L项目中可用,并已修改包含BV_Common.jar的三个项目中的每个项目的属性。

当我使用“Run as ANT script”在每个项目中运行build.xml脚本时,我得到了不同的结果。 BV_L建立得很好。 BV_A和BV_S都得到了可怕的“坏类文件blah blah BV_Common.jar ...类文件有错误版本50.0,应该是49.0”错误 - 表明我正在尝试使用用Java 1.6构建的.jar文件在运行java 1.5时。

在所有这些项目中,build.xml文件引用了一个精心设计的共享构建XML文件集合(从单个公共源引入)。这些文件的作用之一是打印出“java.version”的值。对于BV_L项目,报告为1.6.0_30;对于BV_S和BV_C,它是1.5.0_14。所以某种程度上,这些项目被告知要使用(或兼容?)Java 1.5。但对于我的生活,我无法弄清楚在哪里。

这是我看过的。在所有情况下,我看到的值在所有四个项目中都是相同的(BV_Common,BV_L,BV_C和BV_S):
在“项目属性”屏幕“Java构建路径”的“库”选项卡上,JRE系统库设置为使用“JavaSE-1.6(jdk1.6.0_30)”的“执行环境”。 在项目属性屏幕Java编译器中,选中“启用项目特定设置”框,并在JDK合规性下,选中“在Java构建路径上使用执行环境中的合规性'JavaSE-1.6'”复选框。登记/> 在每个项目中,都有一个.settings文件夹,其中包含一个org.eclipse.jdt.core.prefs文件。这些文件在项目之间逐字节相同。特别是,它们各自包含这些线:
    org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
    org.eclipse.jdt.core.compiler.compliance=1.6
    org.eclipse.jdt.core.compiler.source=1.6
在每个项目中,都有一个.project文件(我假设它控制Eclipse);除项目名称外,这些文件都是相同的。

每个项目都有一个.classpath文件,这些文件不同,因为每个项目都有不同的各种.jar文件集,但它们都包含行
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
它们不包含任何看起来像java编译器,JDK或JRE规范的东西。

BV_Common的build.xml脚本与其他脚本不同,因为它创建了一个.jar文件,但其余三个项目的构建脚本几乎完全相同。它们的区别仅在于以下内容:
project.name属性
project.jvm_arguments属性 - one指定用于标识配置文件的附加-D选项。

但在某些地方,有些事情正在将Java 1.5与我的BV_L和BV_S项目联系起来 我试过关闭并重新启动Eclipse。

1 个答案:

答案 0 :(得分:1)

正如在顶部所提到的,不知何故在输入这个文本墙之后,我突然意识到我需要检查的内容。这是发生了什么。

线索在于“从历史上看,这些项目使用了Java 1.5和1.6的混合”。当我第一次开始在我的工作站上使用这些项目时,在每个项目中,我右键单击build.xml文件,然后“以Ant脚本运行”。这很好用,但我不知道,在每种情况下创建了一个.launch(又名外部工具配置)文件,其中包含从项目的属性中获取的包括要使用的Java版本的信息。在某些情况下,这是1.5。默认情况下,这些.launch文件隐藏在某个某个Eclipse目录中,不在项目目录中,而是包含控制项目及其构建的所有其他文件。要对这些启动配置执行任何操作,必须用红色行李箱点击小按钮,选择“外部工具配置”,然后使用生成的对话框。其中一个选项卡是“JRE”,在那里,可以指定哪个JRE与Ant构建一起使用,就像在Project Properties / Java Build Path / Libraries中一样 - 但是这些规范要使用哪个JRE是独立的,并且仅在首次创建启动配置时才连接。因此,您可以在从Eclipse调试和执行时运行一个版本的Java,在使用Ant构建时运行不同版本的Java。 请注意,如果您只是通过右键单击它并选择“作为Ant脚本运行”来启动Ant构建脚本,并且您从不点击小红色行李箱,您将永远不会知道这些启动配置,但它们将是反正用了。

您可以在“外部工具配置”对话框中选择是否将配置(.launch文件)保存为“本地文件”(默认)或“共享文件”。我发现这个术语令人困惑。 “本地文件”意味着在本地工作站上的某个Eclipse目录中隐藏,而不与在此项目上工作的其他人共享。 “共享文件”表示在该项目的Eclipse工作空间目录中,您可以在其中查看它并将其签入Subversion,其他签出该项目的开发人员将获得与其Ant构建相同的配置。我推荐后者。