Подтвердить что ты не робот

Нет Spring Типы WebApplicationInitializer, обнаруженные на пути к классам

Мой проект Eclipse внезапно перестает корректно развертываться. Я не могу отследить его до каких-либо конкретных изменений, которые я внес в среду.

Я тестировал несколько проектов с контролируемым источником, и все они ведут себя одинаково:

May 01, 2013 12:00:45 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in     production environments was not found on the java.library.path: C:\Program Files   (x86)\Java\jdk1.7.0_11\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA     Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows \System32\WindowsPowerShell\v1.0\;.
May 01, 2013 12:00:45 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:fismacm' did not find a matching property.
May 01, 2013 12:00:45 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
May 01, 2013 12:00:45 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
May 01, 2013 12:00:45 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 296 ms
May 01, 2013 12:00:45 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
May 01, 2013 12:00:45 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.35
May 01, 2013 12:00:46 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags/form is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/security/tags is already defined
May 01, 2013 12:00:48 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
May 01, 2013 12:00:48 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
May 01, 2013 12:00:48 PM org.apache.catalina.core.ApplicationContext log
INFO: Set web app root system property: 'webapp.root' =     [X:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\fismacm\]
May 01, 2013 12:00:48 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing log4j from [X:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\fismacm\WEB-    INF\log4j.properties]
May 01, 2013 12:00:48 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
May 01, 2013 12:00:49 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
May 01, 2013 12:00:49 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
May 01, 2013 12:00:49 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3898 ms

Это похоже на ключевой компонент: INFO: No Spring Типы WebApplicationInitializer, обнаруженные в пути к классам.

Я пробовал очистить проекты, переопределить серверы и даже создать целые новые рабочие пространства. Я явно пропустил отметку.

Любые советы по его очистке будут очень благодарны.

4b9b3361

Ответ 1

Это оказалось глупой ошибкой. Мой log4j не был настроен для сбора моего вывода ошибки. Я выбрасывал ошибки конфигурации в фоновом режиме, и как только я исправил те, что мне было хорошо, и мои сопоставления запросов работали нормально.

Ответ 2

Я потратил часы на это, и решение было:

  • Остановить Tomcat
  • Меню "Проект" → Очистить → Очистить все проекты
  • Вкладка Серверы → Tomcat → Щелкните правой кнопкой мыши → Очистить...
  • Щелкните правой кнопкой мыши по проекту → Запустить как → Запустить на сервере

Ответ 3

Остерегайтесь, если вы используете Maven. Структура вашей папки должна быть правильной.

При использовании Maven каталог WEB-INF должен находиться внутри webapp:

src/main/webapp/WEB-INF

Ответ 4

INFO: Нет Spring Типы WebApplicationInitializer, обнаруженные в пути к классам.

Может также отображаться, если вы используете Maven с Eclipse и развертываете свою WAR,

(Eclipse, Kepler, с M2)

(щелкните правой кнопкой мыши по вашему проекту) → Запустить как → Запустить на сервере

До создания и удаления папки m2e-wtp .

Убедитесь, что отмечен Архив файлов Maven, созданный в каталоге сборки.

В разделе: "Окно → настройки → Maven → Интеграция Java EE"

Тогда:

Используйте M2, чтобы выполнить сборку, то есть обычный пакет Clean → или Install и т.д.

Если "Project → Build Automatically" не выбрано. Вы можете принудительно создать генерацию "m2e-wtp folder and contents",

" (щелкните правой кнопкой мыши по вашему проекту) → Maven → Обновить проект..."

Примечание. Убедитесь, что опция "Чистые проекты" не выбрана. В противном случае содержимое целевых/классов будет удалено, и вы вернетесь к квадрату.

Кроме того, когда;

" Project → Build Automatically" выбрано создание "m2e-wtp folder and contents"

или " Проект → Построить все"

или " (щелкните правой кнопкой мыши по проекту) → Build Project

Ответ 5

WebApplicationInitializer - это интерфейс, который можно реализовать в одном из ваших классов. При запуске Spring выполняется сканирование для этих классов, если вы используете сервлет spec 3 и имеете атрибут metadata-complete = "false" в вашем web.xml. Но это не проблема. Единственной ошибкой, которую я могу выяснить, является отсутствие slf4j-log4j12.jar.

Ответ 6

У меня также была та же проблема. У моего maven был плагин tomcat7, но среда JRE была 1.6. Я изменил свой tomcat7 на tomcat6, и ошибка исчезла.

Ответ 7

xml не был в папке WEB-INF, вот почему я получал эту ошибку, убедитесь, что web.xml и xxx-servlet.xml находятся в папке WEB_INF, а не в папке webapp.

Ответ 8

У меня была глупая ошибка, мне потребовалось смущающе долго решать... Проверьте мой pom.xml...

<?xml version="1.0" encoding="UTF-8"?>
<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>

<groupId>com.outbottle</groupId>
<artifactId>PersonalDetailsMVC</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>PersonalDetailsMVC</name>

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.0.1.RELEASE</spring.version>
    <jstl.version>1.2</jstl.version>
    <javax.servlet.version>3.0.1</javax.servlet.version>
</properties>

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${javax.servlet.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>${jstl.version}</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>7.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Проблема была в имени моего пакета. Он ДОЛЖЕН быть "com.outbottle" (затем config/controllerlers/model/etc), чтобы он работал. Как вы можете видеть выше, я использовал Maven (впервые), Spring, 1,8 JDK и почти имел отладку, отлаживающую эту проблему. Все работает на Glassfish (Tomcat тоже подходит для вышеупомянутой конфигурации pom). Тем не менее, я сейчас доволен собой и знаю Maven и Spring намного лучше для следующего шага кривой обучения Spring. Надеюсь, это тоже поможет!

Ответ 9

STS имеет папку метаданных в своей рабочей области. Вы увидите фактическую ошибку в файле .log под C:\Users\firstname.lastname\Documents\рабочее пространство-ВТР-3.9.2.RELEASE.metadata

Ответ 10

tomcat-maven-plugin в тесте

Tomcat обычно не добавляет классы в src/test/java в путь к классам. Они отсутствуют, если вы запускаете tomcat в области проверки. Чтобы приказать tomcat соблюдать классы в тесте, используйте -Dmaven.tomcat.useTestClasspath=true или добавьте

<properties>
   <maven.tomcat.useTestClasspath>true</maven.tomcat.useTestClasspath>
</properties>

К твоему pom.xml.

Ответ 11

Я провел весь день сегодня, исследуя эту проблему, и ни один из ответов не помог. Вот мой сценарий. Типы WebApplicationInitializer в моем случае находятся внутри jar файлов. у нас есть многомодульный веб-проект gradle, где каждый модуль упакован в виде jar файла и включен в веб-артефакт. Проблема заключается в том, что загрузчик классов Apache tomcat не ищет реализации WebApplicationIntializer в WEB-INF/lib, а ищет эти типы непосредственно в папке WEB-INF/classes.

Вот что я сделал для всех, кто столкнется с этой проблемой в будущем.

Я сам реализовал ServletContainerInitializer и добавил это имя класса в META-INF/services/javax.servlet.ServletContainerInitializer

.В этой реализации я скопировал код из SpringServletContainerIntializer и использовал отражения, чтобы найти классы, реализующие интерфейс CustomWebApplicationInitializer. Я не использовал весенний интерфейс WebApplicationInitializer, чтобы избежать каких-либо конфликтов. В основном у меня тот же контракт, что и у WebApplicationInitializer с другим именем. Теперь при запуске вызывается мой инициализатор контейнера, и я делегировал вызов всем моим CustomWebApplicationInitializer.

Основываясь на результатах поиска, я также обнаружил, что загрузчик, используемый для tomcat, можно обновить, чтобы он осуществлял поиск в WEB-INF/lib, но у меня мало контроля над томкатом, на котором я развернул свое приложение, поэтому я воспользовался приведенным выше решением. Надеюсь, это кому-нибудь поможет.