当前位置: 首页 > 面试题库 >

使用Eclipse在Gradle中选择正确的JRE版本

淳于知
2023-03-14
问题内容

我正在使用带有Eclipse插件的Gradle来为我的项目生成项目文件,但是我无法将其放入正确的JRE版本中.classpath。我可以 添加
一个JRE容器,但是我不知道如何删除默认容器-由于该项目是在开发人员之间共享的,而开发人员可能在Eclipse中设置了不同的默认值,因此我想手动控制它。

我认为这 应该 起作用的方式是这样的:

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.6

由于targetCompatibility与相同sourceCompatibility,我希望此设置进入Eclipse设置,找到与源版本匹配的JRE(是的,我的机器上有一个-
JRE安装和单独的JDK安装),然后进行安装。

但是,它选择的是默认值,在我的计算机上恰好是Java 7。

我尝试将一些东西添加到Eclipse配置中:

eclipse {
    jdt {
        sourceCompatibility = 1.6 // tried with and without this
    }
    classpath {
        // tried various ways to remove the old entry, among them:
        file.beforeMerged { p -> p.entries.clear() }

        // and then I add the "correct" one
        containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_45'
    }
}

做这样的事情,我最终在 两个 JRE容器中.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="output" path="bin"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_45" exported="true"/>
</classpath>

如何告诉gradle我 想要一个JRE 1.6容器, 也不 想要默认容器?

对我追求的一些限制:

  • Eclipse中的默认设置应该无关紧要
  • 最好是,我希望脚本查找容器-在上面的脚本中,定义要添加的容器的字符串取决于用户。我希望在“已安装的JRE”中查找与以下版本相匹配的版本要好得多sourceConfiguration-如果Eclipse中未安装这样的JRE,我可以抛出一个错误。

问题答案:

我最终以比我想要的要多的手动方式解决了这个问题-但至少它可以工作。

为了将设置与实现分开,每个开发人员都有一个gradle.properties未检入版本控制的文件。该文件包含以下信息(在我的工作站上):

javaVersion=1.6
javaPath=C:/Program/Java/jdk1.6.0_45
jdkName=jdk1.6.0_45

构建脚本中,然后执行以下操作以使所有配置正确:

// Set sourceCompatibility
if (project.hasProperty('javaVersion')) {
    project.sourceCompatibility = project.javaVersion
}

// Set bootClasspath - but wait until after evaluation, to have all tasks defined
project.afterEvaluate {
    if (project.hasProperty('javaPath')) {
        project.tasks.withType(AbstractCompile, {
            it.options.bootClasspath = "${project.javaPath}/jre/lib/rt.jar"
        })
    }
}

// Configure Eclipse .classpath
project.eclipse.classpath.file.whenMerged { Classpath cp ->
    if (project.hasProperty('jdkName') {
        cp.entries.findAll { it.path.contains('JRE_CONTAINER') }.each {
            it.path += "/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/$project.jdkName"
        }
    }
}

到目前为止,我已经在几个项目中使用了它,并且它已经起作用了,所以我认为它至少是可移植的-但可能需要进行一些修改以使其适用于其他人。



 类似资料:
  • 我有SQL声明 关系为1-N:用户可能有许多文件。 这有效地选择了第二个10元素页面。 问题是这个查询限制/偏移了一个连接的表,但我想限制/偏移第一个(

  • 我使用的是最新版本的Android Studio,并从Gradle的网站安装了最新版本的Gradle。然后我导入了一些Android示例应用程序,但构建会生成一个错误,内容如下: 需要Gradle版本1.10。当前版本是2.1。 我不知道它从哪里获得1.10版本。如果我打开格雷德包装.properties文件,我有: https://services.gradle.org/distribution

  • 我是在windows环境和使用maven编译我的项目。虽然我刚刚创建了项目并添加了各个Libaries的依赖项。 当我添加它们时,maven开始抱怨缺少,所以我在中添加了以下内容: 当我运行maven安装时,我得到了一个丢失的jar的错误,如下所示: 问题是在“”中,并且在环境变量中正确设置,但是maven仍然在jre文件夹中查找,错误消息为“”。 有趣的是:当我在dependency中设置完整路

  • 为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。 用精度为65位十进制数(基于10)对DECIMAL列进行所有基本计算(+、-、*、/)。参见11.1.1节,“数值类型概述”。 使用双精度操作对DECIMAL值进行计算。如果准确度不是太重要或如

  • 校验者: 翻译者: @李孟禹 通常,解决机器学习问题的最困难的部分可能是找到恰当的的评估器(estimator)。 不同的评估器更适合不同类型的数据和不同的问题。 下面的流程图是一些粗略的指导,可以让用户根据自己的数据来选择应该尝试哪些评估器。 点击下图的任何评估器,查看其文档。

  • 在我的Gradle脚本中,我使用了一些库依赖项,比如 我现在想在应用程序中显示哪个版本的acutally是使用的。最简单的方法是使用保存版本信息。但是我怎么才能知道gradle下载的是哪一个版本。有没有办法在中确定这一点,或者我必须像这里描述的那样从路径中提取它?