2012-04-02 2 views
5

РезюмеЗатмение + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener

Когда я пытаюсь запустить приложение JSF 2.0 изнутри Затмения (на Tomcat 7.0), я получаю следующее исключение:

Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener 
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener 

Я изучаю разработку приложений JSF, используя Eclipse. Я начал с предварительно сконфигурированного проекта Eclipse: File-> New-> Dynamic Web Project-> JavaServer Face v2.0 Project. Используя этот метод, Eclipse предоставляет все зависимости. Но я хочу научиться тому, как все работает. Я хочу удалить «волшебство», поэтому я преобразовал свой проект в проект Maven: Configure-> Convert to Maven.

Затем я создал свой pom.xml (на основе http://myfaces.apache.org/build-tools/archetypes/myfaces-archetype-helloworld20/index.html), он содержит следующее:

<build> 
    <finalName>jsf-facelets-tutorial</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <webXml>WebContent/WEB-INF/web.xml</webXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>el-api</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.0</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-api</artifactId> 
     <version>2.0.5</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-impl</artifactId> 
     <version>2.0.5</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

Но потому, что я не знаком с JSF, и потому, что это "Web Project Dynamic" Eclipse, структура проекта является новой для меня, и у меня возникли проблемы с пониманием того, какие зависимости приходят от Maven и которые обеспечивают «волшебство» Eclipse.

В Eclipse, моя структура проекта выглядит следующим образом:

ProjectName 
    JAX-WS Web Services <-- CAN I REMOVE THIS??? 
    Deployment Descriptor 
    Java Resources 
    src/main 
    Libraries 
     Apache Tomcat v7.0 
     el-api.jar 
     jsp-api.jar 
     [more...] 
     JSF 2.0 (Apache MyFaces JSF Core-2.0 API 2.0.2) <-- I REMOVED THIS!!! 
     EAR Libraries 
     JRE System Library 
     Maven Dependencies 
     el-api-1.0.jar 
     myfaces-api-2.0.5.jar 
     myfaces-impl-2.0.5.jar 
     [more...] 
     Web App Libraries 

Проблема Мой (очень простой) заявление (Логин страница & страница приветствия) больше не работает. Когда я делаю следующее:

(1) Right click on WebContent/login.xhtml 
(2) Run as -> Run on Server 
(3) Apache Tomcat v7.0 - JDK6 at localhost 

я получаю исключение:

Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener 
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener 

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

Если есть какие-либо дополнительные данные, которые я должен предоставить (web.xml, faces-config-xml, login.xhtml), дайте мне знать, и я добавлю их.

Спасибо!

EDIT

WEB-INF/Lib всегда пусто. По моему мнению, необходимо скопировать все зависимости в эту папку, которые потребуются во время выполнения, и которые не предоставляются веб-контейнером. Причины моей пусты: (1) Я не знаю, что мне там нужно (2) Я не знаю, как автоматизировать процесс размещения файлов .jar там

ответ

7

Под вашего затмением Свойства проекта, выберите ассамблею развертывания из навигации которое определяет «структуру упаковки для этого проекта Java EE Web Application». Убедитесь, что вы добавили все зависимости проекта.

Или загляните в каталог веб-сервера под рабочим пространством/.metadata/.plugins/org.eclipse.wst.server.core \ tmp0, чтобы проверить, были ли банки скопированы на базу каталинии.

+0

В сборке развертывания У меня есть две записи: ** (1) ** SOURCE =/src/main, DEPLOY PATH = WEB-INF/classes ** (2) ** SOURCE =/WebContent, DEPLOY PATH =/ –

+2

Нажмите на add buton, выберите Java BuildPath Entries .. выберите все и добавьте .. Это место затмения выбирает все зависимости, которые нужно добавить в WEB-INF/lib – vinodn

+0

После добавления «Maven Dependencies» в «Assembly Assembly» все работает еще раз. Благодаря! –

1

Похоже, вы не есть все банки в вашей целевой папке, готовые к развертыванию в Tomcat

Попробуйте запустить пакет Maven в затмении, щелкните правую кнопку мыши на проект, запустить как пакет Maven

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