Как заставить Play 2.1 компилироваться с другой версией Java

Я разработал приложение Play с использованием Java 1.7. Теперь мне нужно скомпилировать его для версии 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

Максим Калмельс предложил выполнить очистку, чтобы в конечном итоге удалить скомпилированные файлы конфигурации. К сожалению, это не помогло.

Обновление 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 и мой проект на хост, где проект должен быть запущен, и скомпилировав его там. Не очень элегантное решение, и мне все еще интересно, как я могу сделать это локально на своей машине.


person Björn Jacobs    schedule 06.03.2013    source источник
comment
Вы компилируете из командной строки или из IDE? Если второе, убедитесь, что ваша IDE настроена на использование версии 1.6.   -  person mbatchkarov    schedule 07.03.2013
comment
Я компилирую из командной строки.   -  person Björn Jacobs    schedule 07.03.2013
comment
Я хотел бы посмотреть, как вы изменили файлы воспроизведения, возможно, вы могли бы поделиться ими на github или где-то еще, чтобы мы могли увидеть, как вы изменили его для использования jdk 1.7. Вы уверены, что разные версии - это когда вы находитесь в разных каталогах или на разных терминалах оболочки, где они могут иметь разные значения JAVA_HOME?   -  person myyk    schedule 19.04.2013
comment
То, как я изменил файл сценария, точно так же, как вы упомянули в своем ответе. Больше ничего не меняется.   -  person Björn Jacobs    schedule 19.04.2013


Ответы (5)


Где бы вы ни установили Play, вы должны иметь возможность изменить сценарий «play», заменив его следующим образом:

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

эта новая строка:

JAVA="/TheFullJavaPath/bin/java"

Это должно сработать. Тогда этот скрипт будет использовать эту версию. Я рекомендую назвать его так, как будто вы должны играть в java-1.X или что-то в этом роде.

person myyk    schedule 19.04.2013
comment
На самом деле это один из подходов, которые я уже пробовал. Я жестко прописал путь к Java 1.6 в сценарий воспроизведения и назвал его play-1.6. Жестко не помогло... - person Björn Jacobs; 19.04.2013

Я думаю, что версия Java хранится в скомпилированных файлах.
Пытаетесь ли вы очистить свой проект перед запуском скрипта play-1.6?

person Maxime Calmels    schedule 07.03.2013
comment
Привет! Я только что попробовал это, но, к сожалению, это не решило проблему. - person Björn Jacobs; 07.03.2013

Поскольку я не могу комментировать:

1) Пробовали ли вы установить 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
person Grmpfhmbl    schedule 11.01.2014

Не могли бы вы создать сценарий 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

person Juan Carlos    schedule 31.07.2014

У меня была эта проблема, и я решил ее, установив переменную среды JAVA_HOME в текущем сеансе терминала. Как указано @Grmpfhmbl.

Не имеет значения, измените ли вы свою версию Java, используя sudo update-alternatives --config java или что-то еще. Команда play всегда использует переменную окружения JAVA_HOME для компиляции исходников вашего проекта.

Надеюсь это поможет.

person Pedro Hidalgo    schedule 15.12.2014