我使用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和我的项目复制到应该运行项目的主机并在那里编译它。这不是一个非常优雅的解决方案,我仍然想知道如何在我的机器上本地完成它。
答案 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
环境变量来编译项目的源。
希望这有帮助。