2011-07-15 7 views
18

I przestrzegać samouczek wprowadzający ramy Play, ale daje mi błąd:

Execution exception VerifyError occured : Expecting a stack map frame in method controllers.Secure$Security.authentify(Ljava/lang/String;Ljava/lang/String;)Z at offset 33

Nie jestem pewien, co zrobiłem źle. Kod używam (fragmenty):

package controllers; 

.. 

@With(Secure.class) 
public class Application extends Controller 
{ 
    @Before 
    public static void setConnectedUser() 
    { 
     if (Security.isConnected()) 
     { 
      User user = User.find("byEmail", Security.connected()).first(); 
      user.password = null; 
      renderArgs.put("user", user); 
     } 
    } 

    ... 

Dla klasy zabezpieczeń:

package controllers; 

import models.*; 

public class Security extends Secure.Security {  
    static boolean authenticate(String username, String password) { 
     return User.connect(username, password) != null; 
    } 
} 

Dodałem też bezpieczny moduł dependencies.yml który ładuje poprawnie po ponownym uruchomieniu ramy Play. Dodałem bezpieczny model do moich tras. Eclipse nie daje błędów; błąd występuje tylko w czasie wykonywania. Klasa Secure.Security ma publicznie dostępną statyczną metodę isConnected. Używam najnowszej wersji do gry (1.2.2).

+0

Widzę, że uwierzytelnienie jest @Deprecated w Play-source, ale nie wiesz, gdzie został wywołany, jeśli powoduje to wyjątek? –

+1

freeone3000 @ irc.freenode.org # java zasugerował, że może to być związane z faktem, że używam JDK 1.7; coś z kodowaniem bajtowym i sprawdzaniem poprawności. Czy może być związane z 'invokedynamic'? –

Odpowiedz

20

Grupa wiadomości dla Play omawia problem z JDK1.7, a Play jeszcze oficjalnie go nie wspiera. Jeśli to możliwe, spróbuj użyć JDK 6 i sprawdź, czy nadal występuje ten błąd.

Jeśli są ograniczone do JDK7, można skorzystać z opcji

java.source=1.6 

w pliku application.conf.

Aktualizacja 18 sierpnia 2011: Nicolas Leroux niedawno wysłał wiadomość na Twitterze, aby powiedzieć, że wsparcie Java 7 zostało dodane do Play w głównym oddziale. Prawdopodobnie nie wyda wersji 1.2.3, ale później wyda wersję.

+1

Play 1.2.4 RC3 obsługuje Javę 7 - https://groups.google.com/forum/#!topic/play-framework/t2TQl3neUBI – ripper234

+1

w rzeczy samej. Brakowało 1.2.3, ale jak było w master, automatycznie dodano go do 1.2.4. – Codemwnci

+1

Wbrew temu, co głosi komunikat dotyczący wsparcia na 1.7, wydaje się, że tak jest. Nie tylko rozwiązało to problem dla mnie, ale widziałem podobny problem, próbując użyć wtyczki SecureSocial i zobaczyłem, że niektóre z nich mówią o 1.7 również tam (chociaż nie próbowałem go naprawić w tym momencie, więc jestem nie pozytywny wynik tam). Mogę jednak poświadczyć, że używam wersji 1.2.4 i widziałem ten sam błąd, który naprawił ten błąd. – Bane

15

Miałem ten sam, problem, wydaje się, że rzeczywiście pochodzi z JDK7.

ja go rozwiązać, dodać

java.source=1.6 

do pliku application.conf, zatrzymaj aplikację, usuń wszystko w katalogu tmp z aplikacji i uruchom go ponownie, to powinno działać nawet jeśli masz JDK 1.7 zainstalowany

jeśli nie usunąć pliki, grać nie będzie je skompilować i nie będzie działać, nawet jeśli wrócić do JDK 1.6

+2

+1 do czyszczenia/tmp – ripper234

8

można również użyć flagi -XX:-UseSplitVerifier.

+0

to działa w java 1.7; java 1.8 powinieneś dołączyć -noverify do opcji vm – Marks

4

Miałem ten sam problem, gdy uruchomiłem aplikację do odtwarzania. Używam luz 1.2.5 i Java 1.7

Właśnie dodałem

java.source=1.6

w application.conf.

Następnie usunięto folder tmp i uruchom ponownie aplikację.

-1

Jest w porządku, jeśli chcesz używać jdk7. Upewnij się, że ścieżka Java jest skonfigurowana poprawnie. Sprawdź "java -version" i "javac -version".

Przykład ścieżka:

  • "C: \ Program Files \ Java \ jdk1.7.0_07 \ bin" < --- to zrobić
  • „C: \ Program Files \ Java \ jdk1.7.0 _07 \ jre \ bin "< --- nie podoba mi się to
+0

Zgłoszony problem jest w rzeczywistości związany z wygenerowanym kodem bajtowym, który nie jest w pełni zgodny z oczekiwaniami java 7, a nie z binarną wersją java, którą wybrałeś do uruchomienia aplikacji –

Powiązane problemy