2016-04-28 2 views
1

Я взял свой «старый» (созданный несколько месяцев назад, когда работал отлично) 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.
  • Одно или несколько ограничений не были выполнены.

Но, я вижу эти ошибки всегда независимо от работы приложения или нет.

вопрос (ы)

У кого-то встретил эту проблему? Может ли кто-нибудь предложить мне что-нибудь еще, чтобы попробовать? Или что-то не так в настройках моего проекта?

Благодаря

+0

@Martin, оцените свои усилия по различным методологиям, которые вы пробовали, 1) Можете ли вы попробовать с ** Cargo-maven2-plugin ** для развертывания вашей WAR, поскольку он лучше всего подходит для развертывания серверов Tomcat 8+ .. 2) Если вы не импортировали проект Maven, сделайте это! Дайте знать результаты, если они будут работать, обновит ответ. –

+0

Ваш 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

+0

Спасибо, @BalusC, он работает! – martlin

ответ

0

Уведомление по @BalusC решить эту проблему.

Я использую сервлет версии 3.0 (3.0.1) (с использованием зависимости от maven), но web.xml настроен для 2.5, а Tomcat 8 работает с 3.1.

Итак, я изменил версию javax.servlet-api на 3.1.0, обновил web.xml до версии сервлета (см. this post), и он работает.

+0

Вам необходимо убедиться, что зависимость отмечена как «уже предоставленная целевой средой выполнения» на ' при условии, что'. – BalusC

Смежные вопросы