2014-12-25 6 views
8

Sorry, wenn diese Frage zu albern wird, aber ich kann einfach meinen Fehler nicht finden und ich habe bereits viele Beiträge hier in SO und anderen Seiten überprüft. Ich habe ein Play 2.3.7-Projekt mit Java eingerichtet. Ich habe eine Global.java-Datei im allgemeinen Paket im App-Verzeichnis erstellt. In dieser Datei überschreibe ich onStart (und andere Hooks), aber ich bekomme sie nicht zur Arbeit. Sie führen einfach überhaupt nicht aus. Hier ist die Global.java Datei:Global onStart on Play Framework 2.3.7 funktioniert nicht?

package common; 

import play.Application; 
import play.GlobalSettings; 
import play.Logger; 

public class Global extends GlobalSettings { 

    @Override 
    public void beforeStart(Application application) { 
     Logger.error("good bye cruel world"); 
     super.beforeStart(application); 
     throw new RuntimeException("WTF"); 
    } 

    @Override 
    public void onStart(Application application) { 
     Logger.error("good bye cruel world"); 
     super.onStart(application); 
     throw new RuntimeException("WTF"); 
    } 

    @Override 
    public void onStop(Application application) { 
     Logger.error("good bye cruel world"); 
     super.onStop(application); 
     throw new RuntimeException("WTF"); 
    } 
} 

Und im Inneren des application.conf, hier ist der relevante Teil, der standardmäßig kommentiert wird:

# Define the common.Global object class for this application. 
# Default to common.Global in the root package. 
# application.global=common.Global 

Was das Problem sein kann? Vielen Dank.

Antwort

6

Das Objekt Global muss sich im Standardpaket befinden, daher müssen Sie package common entfernen.

Wie im ersten Absatz der documentation angegeben.

+0

Nun, es funktioniert, wenn ich es auf das Standardpaket zu verschieben, in der Tat. Vielen Dank. Jetzt sind die generierten Kommentare ein wenig irreführend und erwähnen standardmäßig das übliche Paket. Außerdem habe ich versucht, Global.java irgendwo anders zu verschieben und application.global = the.new.package.Global zu verwenden, aber es funktioniert nicht: es löst eine Ausnahme aus und die Anwendung startet nicht. Irgendwelche Ideen? – ale64bit

+3

Sie können 'application.global' nur verwenden, um den Klassennamen des' Global'-Objekts zu ändern. z.B. 'application.global = SomethingGlobal', aber Sie können es nicht in ein anderes Paket verschieben. –

+1

Nun, ich habe gerade umgezogen und Global.java in common.SomethingElse.java umbenannt, hinzugefügt application.global = common.SomethingElse und es hat funktioniert. Ich schätze, damit liegen Sie falsch. Danke auf jeden Fall. – ale64bit

8

Es sieht so aus, als hätten Sie vergessen, die Einstellung application.global zu entfernen.

Der folgende Code funktionierte gut für mich.

Global.java Datei:

package common; 

import play.Application; 
import play.GlobalSettings; 
import play.Logger; 

public class Global extends GlobalSettings { 

    @Override 
    public void beforeStart(Application application) { 
     Logger.error("good bye cruel world"); 
     super.beforeStart(application); 
    } 

    @Override 
    public void onStart(Application application) { 
     Logger.error("good bye cruel world"); 
     super.onStart(application); 
    } 

    @Override 
    public void onStop(Application application) { 
     Logger.error("good bye cruel world"); 
     super.onStop(application); 
    } 
} 

application.conf Datei:

# Define the Global object class for this application. 
# Default to Global in the root package. 
application.global=common.Global