2010-12-22 10 views
2

Ich versuche Guice. Ich habe ein einfaches Beispiel gemacht, das dem Beispiel im Handbuch Guice Getting Started sehr ähnlich ist.Warum erkennt Guice aus der TestNG-Zustellung nicht @ javax.inject.Inject, während Guice aus dem com.google.inject-Paket stammt?

Aber es hat seit einiger Zeit nicht und sagte:

kann nicht einen geeigneten Konstruktor in mypack.ServiceUser finden. Klassen müssen entweder einen (und nur einen) Konstruktor haben, der mit @Inject oder einen Zero-Argument-Konstruktor annotiert ist, der nicht privat ist. bei mypack.ServiceUser.class (ServiceUser.java:14) während Ortung mypack.ServiceUser

Das Problem bei den Importen war. Ich habe sowohl Google Guice als auch TestNG an das Projekt angehängt. Und ich importierte Klassen von org.testng.guice Paket. Aber Annotation Inject wurde aus dem javax.inject Paket importiert. Nachdem ich diesen Import in org.testng.guice.Inject geändert habe, begann mein Programm zu arbeiten.

Aber danach spielte ich mit Importen ein wenig mehr. Und ich habe alle org.testng Importe zu com.google.inject geändert. Das Programm hat noch funktioniert. Danach ging ich zurück zur @Inject Annotation und änderte seinen Import in javax.inject.Inject (wie es in meiner allerersten kaputten Version war). Und das Programm hat auch danach funktioniert.

Ich überprüfte noch einmal: Guice von TestNG-Paketen funktioniert nicht mit javax.inject.Inject, während Guice von Google-Paketen (com.google.inject) normal damit arbeitet.

Warum ist es so komisch?

p.s. Ich benutze die letzten Versionen von Guice und TestNG (guice-3.0-rc1 und testng-5.14.5).

Antwort

1

Die kurze Antwort ist: @Guice ist immer noch in Arbeit und wird auf der Mailing-Liste entworfen, so wie wir sprechen, also ist es noch experimentell.

Außerdem verwenden Sie nicht dokumentierte Pakete, die für die interne Verwendung von TestNG (org.testng.guice) reserviert sind.

ich eine neue Version gerade heute gedrückt wird, können Sie es bei http://testng.org/beta

Hinweis downloaden, dass diese neue Version nicht mehr org.testng.guice hat, so stellen Sie sicher, dass, wann immer Sie Guice Symbole benötigen, können Sie sie importieren aus com.google.inject.

Wenn Sie weitere Fragen/Bedenken haben, schreiben Sie bitte in die Mailingliste von testng-users.

Danke.

+0

Danke für die Erklärung und für die neue Version. – Roman

+0

Ich bekomme den gleichen Fehler, wenn ich nur com.google.inject und java.inject.Inject verwende. – ripper234