2013-06-07 10 views
10

Witam Próbuję podążać za Getting Started guide dla Jersey 2.0.Jersey 2.0 "Pierwsze kroki" przewodnik, mainClass nie został znaleziony

Zrobiłem kroki 1.1 i 1.2, jak jest. Nie ma problemu.

Dla kroku 1.3 miałem problem, ponieważ użytkownik nie mógł znaleźć adnotacji javax 1.2, ale rozwiązałem go zgodnie z radą of another Stackoverflow user i dodałem repozytorium do mojego pom.

Więc mvn clean test przechodzi bez żadnych problemów, ale gdy próbuję uruchomić mvn clean exec:java wrócę

[WARNING] java.lang.ClassNotFoundException: com.example.Main 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285) 
at java.lang.Thread.run(Thread.java:722) 

pom.xml jest jeden stworzony przez następujące polecenia:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \ 
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \ 
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \ 
-DarchetypeVersion=2.0 

gdzie Jedynym dodatkiem, który zrobiłem, jest:

<repositories> 
    <repository> 
    <id>java.net.repo</id> 
    <url>https://maven.java.net/content/groups/promoted/</url> 
    <layout>default</layout> 
    </repository> 
</repositories> 

W przypadku, gdy jest to odsetek ten jest wyjście mvn -version

Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200) 
Maven home: /usr/share/maven 
Java version: 1.7.0_21, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/jre 
Default locale: el_GR, platform encoding: UTF-8 
OS name: "mac os x", version: "10.8.3", arch: "x86_64", family: "mac" 
+1

Czy masz klasę o nazwie 'Main'? –

+0

yeap, stworzony domyślnie przez maven pod src/main/java/com/example. W rzeczywistości istnieją dwie klasy automatycznie tworzone Main.java i MyResource.java (opisane w instrukcji obsługi) – user2465039

Odpowiedz

20

jestem w stanie odtworzyć swój błąd. To nie ma nic wspólnego z Jersey; to błąd, który robisz z Mavenem. mvn clean exec:java mówi: "usuń wszystkie pliki .class, a następnie spróbuj uruchomić plik .class Main". Odkąd go usunąłeś, Maven nie może go znaleźć. Oto rozwiązanie:

mvn clean compile exec:java 

To powinno rozwiązać problem z pytaniem. To mówi "usuń wszystkie pliki .class, przekompiluj je ze źródła, a następnie spróbuj uruchomić plik Main .class" Aby uzyskać następny błąd, który zobaczysz, usuń linię <scope>test</scope> z zależności klienta w pom.xml:

<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-client</artifactId> 
    <scope>test</scope> 
</dependency> 

do:

<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-client</artifactId> 
</dependency> 
+1

Dzięki. Nie wiem o maven, ale założyłem, że exec: java będzie zależała od kompilacji. W każdym razie, nawet po usunięciu zakresu z pom.xml, otrzymuję teraz pakiet java.lang.NoClassDefFoundError: org/glassfish/jersey/client/ClientConfig. Myślę, że przewodnik dla początkujących koszulki nie jest dla początkujących :-) – user2465039

+0

@ user2465039 przeczytaj na dole mojej odpowiedzi. Pokazuje, jak to naprawić. –

+0

Dzięki! Usunąłem niewłaściwy zakres :-) Ktoś musi jednak zaktualizować przewodnik. Głosowałbym za tobą, ale nie mam tu jeszcze wystarczającej liczby punktów :-) – user2465039