如何强制Play 2.1编译其他Java版本

时间:2013-03-06 17:15:04

标签: java scala compilation playframework playframework-2.1

我使用Java 1.7开发了一个Play应用程序。现在我需要针对1.6版编译它,因为它将在另一个仍然使用1.6的主机上执行(我无法改变它)

所以我将启动脚本 play 复制到 play-1.6 并以某种方式更改它以便它使用JDK版本1.6(我已经存储在目录中我的电脑)

在任何目录中执行此修改后的脚本时,我会获得所需的信息行

play! 2.1.0 (using Java 1.6.0_38 and Scala 2.10.0), http://www.playframework.org

当我在项目目录中执行相同的脚本时,我得到了行

play! 2.1.0 (using Java 1.7.0_09 and Scala 2.10.0), http://www.playframework.org

该项目使用1.7版本存储此信息的位置,如何强制它针对1.6?

进行编译

更新1

Maxime Calmels建议执行 clean 以最终删除已编译的配置文件。不幸的是,这没有帮助。

更新2

当我在播放控制台中输入 java-home 时,我收到了消息

[info] None

所以我创建了一个build.sbt文件并添加了内容

javaHome := Some(file("/usr/java/jdk1.6.0_38"))

启动播放控制台并输入 java-home 时,我就明白了

[info] Some(/usr/java/jdk1.6.0_38)

但是玩仍然编译1.7版本,所以也没有运气。

更新3

我让它工作...... 只能将Play和我的项目复制到应该运行项目的主机并在那里编译它。这不是一个非常优雅的解决方案,我仍然想知道如何在我的机器上本地完成它。

5 个答案:

答案 0 :(得分:1)

无论您在何处安装了Play,都可以通过将其替换为以下内容来更改“播放”脚本:

if [ -z "$JAVA_HOME" ]; then
    JAVA="java"
else
    JAVA="$JAVA_HOME/bin/java"
fi

这一新行:

JAVA="/TheFullJavaPath/bin/java"

应该这样做。然后该脚本将使用该版本。我建议命名它,就像你必须玩java-1.X或其他东西。

答案 1 :(得分:0)

我认为java版本存储在已编译的文件中 在开始播放1.6脚本之前,您是否尝试清理您的项目?

答案 2 :(得分:0)

我无法发表评论:

1)在开始游戏之前,您是否尝试在shell中设置JAVE_HOME?不要改变播放剧本。如果它在环境中也可以在其他地方进行游戏。在bash中,它看起来像

#> export JAVA_HOME="/your/jdk/path"; play

2)你在游戏机中试过inspect *:javaHome了吗?如果javaHome已明确设置在项目内的某个位置,那么应该显示在哪里。对我来说看起来像是:

[project] $ inspect javaOptions
[info] Task: scala.collection.Seq[java.lang.String]
[info] Description:
[info]  Options passed to a new JVM when forking.
[info] Provided by:
[info]  */*:javaOptions
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:106
[info] Reverse dependencies:
[info]  *:runner
[info] Delegates:
[info]  *:javaOptions
[info]  {.}/*:javaOptions
[info]  */*:javaOptions
[info] Related:
[info]  */*:javaOptions

答案 3 :(得分:0)

您是否可以创建用于编译的Ant脚本? (我必须承认我不熟悉Play,所以我不知道是否可能)。

这就是我所做的,然后是编译目标:

<target name="compile" depends="prepare" description="Compile Java sources">
  <!-- Compile Java classes as necessary -->
  <javac
    bootclasspath="/path/to/1.6/rt.jar"
    destdir="/path/to/dest" includeantruntime="false" debug="true"
    deprecation="false" optimize="true"
    source="6" target="6" encoding="utf-8">
    <src path="/path/to/source" />
    <classpath refid="compile.classpath" />
  </javac>
</target>

bootclasspath是关键。它应该指向Java 1.6的安装,尤其是文件rt.jar。

我不知道我的答案是否应该包含更多关于Ant的背景信息。以防万一,Ant是一个用于创建任务的Java库(非常通用)。

Ant:http://ant.apache.org/ Ant初学者教程:http://www.comscigate.com/ant/A_beginners_guide_to_Ant.htm

答案 4 :(得分:0)

我有这个问题,我解决了它在当前终端会话中设置JAVA_HOME环境变量。按照规定@Grmpfhmbl

使用sudo update-alternatives --config java或其他任何内容更改Java版本无关紧要。 play命令总是使用JAVA_HOME环境变量来编译项目的源。

希望这有帮助。