Не удалось запустить базовый новый проект RESTful в IntelliJ, ошибка сканирования аннотаций?
Я использую IntelliJ 13.1.3. Я создаю новый проект, проверяю RESTful Web Service (2.2), устанавливаю флажок "Создать образец кода сервера", нажимаю "Далее", введите имя проекта и нажмите "Готово".
Теперь у меня есть пример проекта с кодом. Поскольку я ничего не изменил и все это автоматически сгенерировано, я смогу просто нажать Run и заставить его работать.
К сожалению, это не удается. IntelliJ не может найти com.sun.jersey, из которого можно импортировать что-либо, в частности класс HttpServerFactory, который используется в примере кода. Я нашел этот вопрос, который, кажется, та же проблема, и следуйте инструкциям там. Это работает, и проект теперь компилируется.
Итак, я нажал run, ожидая некоторый вывод на консоль и возможность получить "Hello World", посетив localhost в моем браузере. Вместо этого я получаю трассировку стека для исключения. Консольный вывод:
Jun 21, 2014 10:24:34 AM com.sun.jersey.api.core.ClasspathResourceConfig init
INFO: Scanning for root resource and provider classes in the paths:
D:\Program Files\Java\jdk1.8.0_05\jre\lib\charsets.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\deploy.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\javaws.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\jce.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\jfr.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\jfxswt.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\jsse.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\management-agent.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\plugin.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\resources.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\rt.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\access-bridge-64.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\cldrdata.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\dnsns.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\jaccess.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\jfxrt.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\localedata.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\nashorn.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunec.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunjce_provider.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunmscapi.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\sunpkcs11.jar
D:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\zipfs.jar
D:\test\target\classes
D:\test\lib\jersey-container-servlet.jar
D:\test\lib\jersey-container-servlet-core.jar
D:\test\lib\jersey-client.jar
D:\test\lib\javax.ws.rs-api-2.0.jar
D:\test\lib\jersey-common.jar
D:\test\lib\jersey-server.jar
C:\Users\Douglas\.m2\repository\com\sun\jersey\jersey-server\1.18.1\jersey-server-1.18.1.jar
C:\Users\Douglas\.m2\repository\com\sun\jersey\jersey-core\1.18.1\jersey-core-1.18.1.jar
D:\Program Files\JetBrains\IntelliJ IDEA 13.1.3\lib\idea_rt.jar
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 39168
at jersey.repackaged.org.objectweb.asm.ClassReader.readClass(ClassReader.java:1976)
at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:464)
at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:420)
at com.sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.java:138)
at com.sun.jersey.core.spi.scanning.JarFileScanner.scan(JarFileScanner.java:97)
at com.sun.jersey.core.spi.scanning.JarFileScanner$1.f(JarFileScanner.java:74)
at com.sun.jersey.core.util.Closing.f(Closing.java:71)
at com.sun.jersey.core.spi.scanning.JarFileScanner.scan(JarFileScanner.java:71)
at com.sun.jersey.core.spi.scanning.FilesScanner.scan(FilesScanner.java:83)
at com.sun.jersey.core.spi.scanning.FilesScanner.scan(FilesScanner.java:74)
at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:80)
at com.sun.jersey.api.core.ClasspathResourceConfig.init(ClasspathResourceConfig.java:119)
at com.sun.jersey.api.core.ClasspathResourceConfig.<init>(ClasspathResourceConfig.java:101)
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:263)
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:246)
at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:117)
at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:92)
at example.HelloWorld.main(HelloWorld.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Process finished with exit code 1
Все, что мне удалось найти по этой проблеме, - это пост, который решает сам, в котором говорится, что где-то есть поврежденный класс Java, который приводит к сбою сканирования аннотаций, но я проверил мои параметры платформы /SDK и ничего не выглядит неуместным и я все равно запускаю совершенно новую установку.
Любые идеи о том, как это исправить, или почему импорт должен быть исправлен?
2 ответа
У меня была та же самая проблема, работающая под Java 8. Возвращение к Java 7 "исправило" ее, в смысле разрешения работы сервера.