7

我使用 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 建议执行清理以最终删除已编译的配置文件。不幸的是,这没有帮助。

更新 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)

但是 play仍然针对 1.7 版本进行编译,所以也没有运气。

更新 3

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

4

5 回答 5

1

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

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

这条新线:

JAVA="/TheFullJavaPath/bin/java"

那应该这样做。然后该脚本将使用该版本。我建议将其命名为必须播放-java-1.X 之类的。

于 2013-04-19T01:32:29.697 回答
0

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

于 2013-03-07T07:35:04.547 回答
0

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

如果您更改 java 版本使用sudo update-alternatives --config java或其他任何东西都没有关系。play 命令总是使用JAVA_HOME环境变量来编译项目的源代码。

希望这可以帮助。

于 2014-12-15T14:40:34.680 回答
0

因为我无法评论:

JAVE_HOME1)在开始游戏之前,您是否尝试过在 shell 中进行设置?不要更改播放脚本。如果它要求那里的环境,也可以在其他地方进行。在 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
于 2014-01-11T22:15:06.673 回答
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>

引导类路径是关键。它应该指向 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

于 2014-07-31T15:43:07.530 回答