2013-03-06 9 views
7

Ho sviluppato un'applicazione Play utilizzando Java 1.7. Ora ho bisogno di compilarlo contro versione 1.6, perché verrà eseguito su un altro host che utilizza ancora 1.6 (e non posso cambiare la situazione)Come forzare Play 2.1 per compilare rispetto ad altra versione Java

così ho copiato lo script di avvio gioco-play-1.6 e lo cambiò in modo tale che esso utilizza JDK versione 1.6 (che ho memorizzato in una directory sul mio computer)

Quando l'esecuzione di questo script modificato in qualsiasi directory ricevo informazioni linea desiderata

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

Quando eseguo lo stesso script nel mio progetto direc Tory ottengo la linea

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

casi in cui è presente informazioni memorizzate che il progetto utilizza la versione 1.7 e come posso forzarlo per compilare contro 1.6?

Update 1

Maxime Calmels proposto di effettuare una pulito al fine di rimuovere eventualmente i file di configurazione compilati. Sfortunatamente questo non ha aiutato.

Update 2

Quando ho digitato java-casa nella console di gioco, ho ricevuto il messaggio

[info] None 

così ho creato un file build.sbt e ha aggiunto il contenuto

All'avvio della console di gioco e digitare java-home Ora ho la linea

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

Ma giocare ancora compila contro la versione 1.7, in modo che nessun fortuna con che o.

Update 3

ho ottenuto che funziona ... MA solo copiando Play e il mio progetto per l'host in cui il progetto deve essere eseguito e compilato lì. Non è una soluzione molto elegante e mi chiedo ancora come potrei farlo localmente sulla mia macchina.

+0

Si sta compilando da riga di comando o da un IDE? Se quest'ultimo, assicurarsi che il tuo IDE è configurato per utilizzare 1.6 – mbatchkarov

+0

sto compilando dalla riga di comando. –

+0

Mi piacerebbe vedere come hai cambiato i file di riproduzione, forse potresti condividerli su github o qualcosa del genere in modo da poter vedere come hai cambiato per usare jdk 1.7. Sei sicuro che le diverse versioni siano quando ti trovi in ​​diverse directory o in diversi terminali di shell dove potrebbero avere valori JAVA_HOME diversi? – myyk

risposta

0

Penso che la versione java sia archiviata in file compilati.
Provi a pulire il tuo progetto prima di avviare lo script di riproduzione 1.6?

+0

Salve! Ho appena provato questo, ma sfortunatamente questo non ha risolto il problema. –

1

Ovunque è stato installato il gioco, si dovrebbe essere in grado di cambiare lo script "giocare", sostituendo questo come con:

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

questa nuova linea:

JAVA="/TheFullJavaPath/bin/java" 

Che dovrebbe farlo. Quindi quello script avrebbe usato quella versione. Ti consiglio di nominarlo come se dovessi giocare a java-1.X o qualcosa del genere.

+1

Questo è in realtà uno degli approcci che ho già provato. Ho hard-coded il percorso di Java 1.6 nello script di gioco e l'ho chiamato play-1.6. Non ha aiutato duro ... –

0

Come non posso commentare:

1) Avete provato a fissare JAVE_HOME nella shell, prima di iniziare il gioco? Non cambiare lo script di gioco. Se ti chiede l'ambiente, il gioco potrebbe svolgersi anche in altri posti. In bash sarebbe simile a

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

2) Hai provato inspect *:javaHome nella console di gioco? Se javaHome è stato impostato esplicitamente da qualche parte all'interno del progetto, questo dovrebbe mostrarti dove. Per me sembra che:

[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 
0

Potrebbe essere possibile creare uno script Ant per la compilazione? (Devo confessare che non ho familiarità con Play, quindi non so se è possibile).

Questo è quello che ho fatto e poi nel target di compilazione:

<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 è la chiave. Dovrebbe puntare all'installazione di Java 1.6 in particolare, del file rt.jar.

Non so se la mia risposta dovrebbe includere più informazioni di base su Ant. Nel caso in cui, Ant è una libreria Java per creare attività (molto generale).

Ant: http://ant.apache.org/ principianti tutorial per Ant: http://www.comscigate.com/ant/A_beginners_guide_to_Ant.htm

0

Ho avuto questo problema ed ho risolto impostando la variabile di ambiente JAVA_HOME nella sessione terminale corrente. Come specificato @Grmpfhmbl.

Non importa se si modifica la versione java utilizzando sudo update-alternatives --config java o altro. Il comando di riproduzione utilizza sempre la variabile di ambiente JAVA_HOME per compilare i sorgenti del progetto.

Spero che questo aiuti.

Problemi correlati