Я взял свой «старый» (созданный несколько месяцев назад, когда работал отлично) JSF & приложение maven и приступило к рефакторингу и реструктуризации.Tomcat in Eclipse не смог начать с проекта JSF
Но, когда я это сделал, приложение полностью остановилось для работы (в Eclipse, но я боюсь, что это будет похоже на простой Tomcat).
Журнал
Когда я добавляю мое приложение к экземпляру Tomcat и запустить сервер, затмение показывает мой диалог с сообщением «Сервер Tomcat 8 (evic2 эмулятор) не удалось запустить.». В журнале можно увидеть следующее исключение (полный журнал здесь: http://pastebin.com/YEX60a9c) (первое исключение вызывает сервер бросить еще три, опущен, см полный журнал, если это необходимо):
....
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/hg6web]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/hg6web]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [[email protected]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4928)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5058)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more
Caused by: java.lang.IllegalArgumentException: The main resource set specified [**MYAPP**/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/hg6web] is not valid
at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:723)
at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:684)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Dub 28, 2016 2:06:01 DOP. org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
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:497)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more
....
Корень проблемы
Сервер не может запускаться из-за проблемы с компонентом моего приложения. Проблема моего приложения - выглядит как - задается этим исключением:
Caused by: java.lang.IllegalArgumentException: The main resource set specified [**MYAPP**/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/hg6web] is not valid
Это означает, что есть что-то не так с моим приложением, но, к сожалению, не указано, что.
То, что я пытался
После много прибегая к помощи, я не нашел решение, поэтому я пытался эти (в различных комбинациях):
- Чистый кот
- Clean Tomcat Рабочий каталог
- Добавить и удалить
- чистый (Project ->Clean ...)
- восстановить с помощью Maven (
mvn clean install
) - возобновить проект
- удалить и импортировать проект снова
- удалить "проблемный" папка
**MYAPP**/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/
- удалить и воссоздать проект с использованием maven (
mvn eclipse:clean eclipse:eclipse
) - создать новый сервер и использовать вместо него старый
Ничего из этого не помогло. «Лучшее», что я получил, это то, что сервер запускался без ошибок, но приложение по-прежнему не было развернуто должным образом, потому что браузер показывает мне всегда 404 страницы.
Моя идея
я вещь проблема на самом деле не в моем приложении (опять же, перед тем рефакторинга он работал хорошо), но в среде Eclipse,/Tomcat.
Моя среда
Я бегу:
- Debian Linux, amd64
- Oracle Java 1.8.0_60
- Затмение Mars.1 релиз (4.5.1)
- Apache Maven 3,0,5
- Apache Tomcat 8.0.30
Мое приложение
Вот pom.xml
моего приложения:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>hg6web</artifactId>
<packaging>war</packaging>
<!-- the parent project is just simple pom project -->
<parent>
<groupId>cz.martlin</groupId>
<artifactId>homeguard6local</artifactId>
<version>0.1.0</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- JSF stuff -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<!-- other dependencies went here -->
</dependencies>
<build>
<plugins>
<!-- http://kosalads.blogspot.cz/2014/03/maven-deploy-war-in-tomcat-7.html -->
<!-- Tomcat plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/${project.build.name}</path>
<update>true</update>
<url>http://localhost:8080/manager/text</url>
<username>***username***</username>
<password>***password***</password>
</configuration>
</plugin>
</plugins>
</build>
</project>
и web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>hg6web</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Грани проекта (https://www.dropbox.com/s/5kvz87ooc1ftzpb/hg6web-facets.png?dl=0) моего приложения являются
- Dynamic Web Модуль 3.1
- Java 1,8
- JavaScript 1,0
- JavaServerFaces 2.2
Обратите внимание, что дисплеи Eclipse, следующие кортежем ошибок в Проблемы панели:
- Невозможно изменить версию проекта фасета Dynamic Web Модуль до 2.5.
- Одно или несколько ограничений не были выполнены.
Но, я вижу эти ошибки всегда независимо от работы приложения или нет.
вопрос (ы)
У кого-то встретил эту проблему? Может ли кто-нибудь предложить мне что-нибудь еще, чтобы попробовать? Или что-то не так в настройках моего проекта?
Благодаря
@Martin, оцените свои усилия по различным методологиям, которые вы пробовали, 1) Можете ли вы попробовать с ** Cargo-maven2-plugin ** для развертывания вашей WAR, поскольку он лучше всего подходит для развертывания серверов Tomcat 8+ .. 2) Если вы не импортировали проект Maven, сделайте это! Дайте знать результаты, если они будут работать, обновит ответ. –
Ваш web.xml объявляет Servlet 2.5 вместо 3.1, а ваш pom.xml сообщает, что Maven должен включать Servlet 3.0.1 в развертывании WAR. Оба абсолютно неправильны. Tomcat 8 является контейнером Servlet 3.1 (который уже предоставляет библиотеку Servlet 3.1 самостоятельно). Исправьте ваш web.xml, чтобы он соответствовал Servlet 3.1 и исправил pom.xml, чтобы сообщить Maven, что библиотека Servlet 3.1 уже «предоставлена» целевой средой выполнения. По крайней мере, это, вероятно, должно устранить вашу панель Eclipse * Problems *, но вряд ли это исключение корня. Дайте ему попробовать, так что мы можем исключить плохо сконфигурированный проект из причины. – BalusC
Спасибо, @BalusC, он работает! – martlin