Geen Spring WebApplicationInitializer-typen gedetecteerd op klassenpad

Mijn Eclipse-project wordt plotseling niet meer goed geïmplementeerd. Ik kan het niet herleiden tot een bepaalde wijziging die ik in de omgeving heb aangebracht.

Ik heb getest met meerdere brongestuurde projecten en ze gedragen zich allemaal op dezelfde manier:

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

Dit lijkt het belangrijkste onderdeel: INFO: Geen Spring WebApplicationInitializer-typen gedetecteerd op classpath.

Ik heb geprobeerd de projecten op te schonen, de servers opnieuw te definiëren en zelfs geheel nieuwe werkruimten te creëren. Ik heb duidelijk de plank misgeslagen.

Alle tips om dit op te ruimen worden zeer op prijs gesteld.


Antwoord 1, autoriteit 100%

Ik heb hier uren aan besteed en de oplossing was:

  • Stop Tomcat
  • “Project”-menu -> Schoon -> Alle projecten opschonen
  • Tabblad Servers -> Tomkat -> Klik met de rechtermuisknop -> Schoon…
  • Klik met de rechtermuisknop op project -> Uitvoeren als -> Uitvoeren op server

Antwoord 2, autoriteit 44%

Dit bleek een stomme fout te zijn. Mijn log4j was niet geconfigureerd om mijn foutoutput vast te leggen. Ik gooide configuratiefouten op de achtergrond en toen ik die eenmaal had opgelost, kon ik beginnen en mijn verzoektoewijzingen werkten prima.


Antwoord 3, autoriteit 32%

Pas op als u Maven gebruikt. De structuur van uw map moetkloppen.

Bij gebruik van Maven moet de WEB-INF-directory zich in de webappbevinden:

src/main/webapp/WEB-INF

Antwoord 4, autoriteit 20%

INFO: geen Spring WebApplicationInitializer-typen gedetecteerd op classpath.

kan ook worden weergegeven als u MAVEN gebruikt met Eclipse en uw oorlog met behulp van;

(Eclipse, Kepler, met M2)

(klik met de rechtermuisknop op uw project) – & GT; Ren als – & GT; Run On Server

Het is aan het genereren en verwijderen van de M2E-WTP map en inhoud.

Zorg ervoor, Maven-archief gegenereerde bestanden onder de Build Directory is gecontroleerd.

Onder: “venster – & GT; voorkeuren – & GT; MAVEN – & GT; JAVA EE-integratie”

Dan:

Gebruik M2, om uw build te doen, d.w.z. de gebruikelijke schone – & GT; Pakket of installatie enz …

Als “project – & gt; build automatisch” is geselecteerd.
U kunt de generatie “M2E-WTP-map en inhoud” dwingen door te doen;

(klik met de rechtermuisknop op uw project) – & GT; MAVEN – & GT; Update Project …

OPMERKING: Zorg ervoor dat de optie “Clean Projects” niet is geselecteerd.
Anders wordt de inhoud van doel / klassen verwijderd en u bent terug naar Vierkante.

ook, wanneer;

project – & gt; automatisch bouwen ” is geselecteerd met de map “M2E-WTP-map en inhoud” wordt gegenereerd

of
Project – & GT; Bouw alle

of
(klik met de rechtermuisknop op project) – & GT; Bouw Project


Antwoord 5, Autoriteit 8%

WebAppplicationInitializer is een interface die u in een van uw klassen kunt implementeren. Bij Startup Spring scant voor deze klassen, zolang u Serymlet Spec 3 gebruikt en een metadata-compleet = “FALSE” -attribuut in uw web.xml hebt. Maar dat lijkt het probleem niet te zijn. De enige fout die ik kan achterhalen, is de ontbrekende SLF4J-LOG4J12.JAR.


Antwoord 6, Autoriteit 8%

Ik heb geconfronteerd met dit probleem en opgelost uiteindelijk. Zorg ervoor dat uw web.xml- en servet.xml-bestand in Web / InF-map aanwezig moet zijn.

Voeg ook de lente-potten toe aan web-implementatie-montage in projecteigenschappen

We hebben dit mogelijk over het hoofd gezien bij het opzetten van het project vanaf het begin.


Antwoord 7, autoriteit 4%

Ik had ook hetzelfde probleem. Mijn maven had een tomcat7-plug-in, maar de JRE-omgeving was 1.6. Ik heb mijn tomcat7 gewijzigd in tomcat6 en de fout was verdwenen.


Antwoord 8, autoriteit 4%

In mijn geval werd het ook een foutopsporingssessie van meerdere uren. Proberen om een uitgebreidere logging op te zetten bleek volkomen zinloos omdat het probleem was dat mijn applicatie niet eens startte. Dit is mijn context.xml:

<?xml version='1.0' encoding='utf-8'?>
<Context path="/rc2" docBase="rc2" antiResourceLocking="false" >
    <JarScanner>
        <JarScanFilter
            tldScan="spring-webmvc*.jar, spring-security-taglibs*.jar, jakarta.servlet.jsp.jstl*.jar"
            tldSkip="*.jar"
            <!-- my-own-app*.jar on the following line was missing! -->
            pluggabilityScan="${tomcat.util.scan.StandardJarScanFilter.jarsToScan}, my-own-app*.jar"
            pluggabilitySkip="*.jar"/>
    </JarScanner>
</Context>

Het probleem was dat ik, om het opstarten van de applicatie te versnellen, het scannen van veel JAR’s begon over te slaan, helaas inclusief mijn eigen applicatie.


Antwoord 9

xml stond niet in de WEB-INF-map, daarom kreeg ik deze foutmelding,
zorg ervoor dat web.xml en xxx-servlet.xml zich in de WEB_INF-map bevinden en niet in de webapp-map.


Antwoord 10

Ik kreeg een domme fout, het duurde beschamend lang om op te lossen…. Bekijk mijn 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>

Het probleem was mijn pakketnaam. Het MOET “com.outbottle” zijn (dan config/controllers/model/etc) om het te laten werken. Zoals je hierboven kunt zien, gebruikte ik Maven (voor de eerste keer), Spring, 1.8 JDK en had ik bijna een beroerte om dit probleem op te lossen. Alles draait op Glassfish (Tomcat is ook goed voor de bovenstaande pom-configuratie). Dat gezegd hebbende, ik ben nu helemaal blij met mezelf en ken Maven en Spring veel beter voor de volgende stap in mijn leercurve voor Spring. Ik hoop dat dit jou ook helpt!


Antwoord 11

STS heeft een metadatamap onder zijn werkruimte. U ziet de daadwerkelijke fout in het .log-bestand onder
C:\Users\firstname.lastname\Documents\workspace-sts-3.9.2.RELEASE.metadata


Antwoord 12

tomcat-maven-plugin in test

Tomcat voegt meestal geen klassen toe in src/test/javanaar het klassenpad. Ze ontbreken als je Tomcat in scope-test uitvoert. Om Tomcat te bestellen om klassen in testen te respecteren, gebruik dan -Dmaven.tomcat.useTestClasspath=trueOF TOEVOEGEN

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

Naar uw pom.xml.


Antwoord 13

Ik heb vandaag mijn hele dag doorgebracht met het onderzoeken van dit probleem en geen van de antwoorden hielp. Hier is mijn scenario. De webapplicationinitializer-typen in mijn geval zijn in JAR-bestanden. We hebben een multi-module gradle webproject waarbij elke module is verpakt als een pot en opgenomen in het webartefact. Het probleem is dat de ClassLoader van Apache Tomcat niet op zoek is naar de implementaties van webapplicationIalizer in Web-Inf / Lib in plaats daarvan op zoek naar die typen direct onder Web-Inf / Classes-map.

Hier is wat ik eindigde voor iedereen die in de toekomst geconfronteerd wordt met dit probleem.

Ik implementeer zelf een ServletContainerInitializer en voegde die klasnaam toe aan Meta-Inf / Services / Javax.Servlet.ServletContainerInitializer

In de implementatie heb ik de code gekopieerd van SpringervletContainerTializer en gebruikte reflecties om de klassen te vinden die een CustomWebapplicationInitializer-interface implementeren, ik maakte geen gebruik van de webapplicationinitializer-interface van de lente om conflicten te voorkomen. In principe heb ik hetzelfde contract als webapplicationinitializer met een andere naam. Nu bij het opstarten wordt mijn containerinitialiser genoemd en heb ik de oproep gedelegeerd aan al mijn CustomWebapplicationInitializers.

Op basis van mijn zoekopdracht ontdekte ik ook dat de lader die voor Tomcat wordt gebruikt, kan worden bijgewerkt om hem te laten zoeken in WEB-INF/lib, maar ik heb weinig controle over de Tomcat waarop ik mijn app implementeer, dus ging met de bovenstaande oplossing. Ik hoop dat dit iemand helpt.

Other episodes