2016-07-08 22 views
5

Ho riscontrato il seguente errore durante la distribuzione del file war nel server weblogic. Ho creato questo utilizzando Maven.Errore 500 - Errore interno del server java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config 
at org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:97) 
at org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:135) 
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:211) 
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264) 
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3750) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714) 
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283) 
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182) 
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491) 
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:252) 
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 

Ho la JSTL-1.2 in lib e JSTL-1.2 in weblogic too.but ottenere la stessa eccezione.

Ho anche provato a rimuovere il jstl-1.2 dalla cartella lib di war.Anche se ottengo la stessa eccezione.

Quale potrebbe essere il motivo?

Questo è il mio pom

<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>se.jo.joassivosWebApp</groupId> 
 
    <artifactId>MApp</artifactId> 
 
    <packaging>war</packaging> 
 
    <version>0.0.1-SNAPSHOT</version> 
 
    <name>MApp Maven Webapp</name> 
 
    <url>http://maven.apache.org</url> 
 
    <dependencies> 
 

 
<dependency> 
 
    <groupId>javax.servlet</groupId> 
 
    <artifactId>servlet-api</artifactId> 
 
    <version>2.4</version> 
 
</dependency> 
 

 

 
<dependency> 
 
\t <groupId>javax.servlet</groupId> 
 
\t <artifactId>jstl</artifactId> 
 
\t <version>1.2</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>antlr</groupId> 
 
\t <artifactId>antlr</artifactId> 
 
\t <version>2.7.7</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>commons-collections</groupId> 
 
\t <artifactId>commons-collections</artifactId> 
 
\t <version>3.2</version> 
 
</dependency> 
 
<dependency> 
 
\t <groupId>commons-logging</groupId> 
 
\t <artifactId>commons-logging</artifactId> 
 
\t <version>1.1.1</version> 
 
</dependency> 
 
<dependency> 
 
\t <groupId>dom4j</groupId> 
 
\t <artifactId>dom4j</artifactId> 
 
\t <version>1.6.1</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>org.hibernate</groupId> 
 
\t <artifactId>hibernate</artifactId> 
 
\t <version>3.2.6.ga</version> 
 
</dependency> 
 
<dependency> 
 
\t <groupId>org.hibernate</groupId> 
 
\t <artifactId>hibernate-annotations</artifactId> 
 
\t <version>3.3.0.ga</version> 
 
</dependency> 
 
<dependency> 
 
\t <groupId>org.hibernate</groupId> 
 
\t <artifactId>hibernate-commons-annotations</artifactId> 
 
\t <version>3.3.0.ga</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>org.codehaus.jackson</groupId> 
 
\t <artifactId>jackson-mapper-asl</artifactId> 
 
\t <version>1.6.3</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>javax.transaction</groupId> 
 
\t <artifactId>jta</artifactId> 
 
\t <version>1.1</version> 
 
</dependency> 
 
<dependency> 
 
\t <groupId>log4j</groupId> 
 
\t <artifactId>log4j</artifactId> 
 
\t <version>1.2.12</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>org.springframework</groupId> 
 
\t <artifactId>spring-orm</artifactId> 
 
\t <version>3.1.0.RELEASE</version> 
 
</dependency> 
 

 
<dependency> 
 
\t <groupId>org.springframework</groupId> 
 
\t <artifactId>spring-webmvc</artifactId> 
 
\t <version>3.1.0.RELEASE</version> 
 
</dependency> 
 
<dependency> 
 
     <groupId>com.oracle</groupId> 
 
     <artifactId>ojdbc14</artifactId> 
 
     <version>10.2.0.2.0</version> 
 
</dependency> 
 
    
 
    </dependencies> 
 
<!-- <build> 
 
    <finalName>MApp</finalName> 
 
    </build> --> 
 
    
 
<build> 
 
     <finalName>MApp</finalName> 
 
     <plugins> 
 
      <plugin> 
 
       <groupId>org.apache.tomcat.maven</groupId> 
 
       <artifactId>tomcat7-maven-plugin</artifactId> 
 
       <version>2.0</version> 
 
      </plugin> 
 
      <plugin> 
 
       <groupId>org.apache.maven.plugins</groupId> 
 
       <artifactId>maven-compiler-plugin</artifactId> 
 
       <version>2.3.2</version> 
 
       <configuration> 
 
        <source>1.6</source> 
 
        <target>1.6</target> 
 
       </configuration> 
 
      </plugin> 
 
      <plugin> 
 
       <groupId>org.apache.maven.plugins</groupId> 
 
       <artifactId>maven-war-plugin</artifactId> 
 
       <version>2.1.1</version> 
 
       <configuration> 
 
        <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory> 
 
        <packagingExcludes>WEB-INF/lib/xercesImpl-2.0.2.jar,WEB-INF/lib/xml-apis-1.0.b2.jar</packagingExcludes> 
 
        
 
       </configuration> 
 
      </plugin> 
 
      <plugin> 
 
       <groupId>org.apache.maven.plugins</groupId> 
 
       <artifactId>maven-surefire-plugin</artifactId> 
 
       <version>2.17</version> 
 
       <configuration> 
 
        <argLine>-XX:-UseSplitVerifier</argLine> 
 
       </configuration> 
 
      </plugin> 
 
     </plugins> 
 
     
 
    </build> 
 
    
 
    
 
</project>

Questa è la mia guerra cartella lib

enter image description here

enter image description here

+1

puoi mostrare il tuo file pom per favore? – Jens

+0

Scommetto che esiste un conflitto di librerie JSTL di versioni diverse. Trova tutte le versioni della libreria installata, nell'EAR, nelle WAR e nell'installazione di WebLogic. Controlla anche le librerie approvate. Quali versioni di Spring, WebLogic, JSF stai usando? –

+0

utilizzando weblogic 10.3.6.0 – smith

risposta

0

Il problema è di weblogic.xml.I didnot aggiungere weblogic.xml.After aggiungendo la weblogic.xml con tag preferisca, web-inf-classi . Ora l'app sta funzionando bene. Ho aggiunto weblogic.xml per la primavera e l'ibernazione con il tag prefer-web-inf-classes.

+0

Impostando questo valore, si dice a weblogic di favorire tutto ciò che è fornito nella cartella WEB-INF/lib su ciò che viene fornito con il server dell'applicazione. Permettetemi di non essere d'accordo sul fatto che volete davvero scavalcare il servlet-API. Quello che hai fatto è una soluzione alternativa non è una soluzione. Effettivamente ciò che vuoi è rimuovere dalla cartella lib tutto ciò che non è necessario. –

8

Si prega di impostare esimo ambito di dipendenza in Maven per servlet-API in pom.xml a "fornito". Fai lo stesso per la dipendenza da jstl. Arrivano già come parte del tuo Weblogic. Non c'è assolutamente alcun motivo per impacchettare i servlet nel tuo barattolo.

Assicurarsi che non siano presenti nella cartella war lib. Se sono ancora è necessario verificare le dipendenze transitive. Puoi trovarli con il comando "mvn dependency: tree".

+1

Alcuni altri contenitori Servlet, come Tomcat, richiedono la distribuzione di jstl.jar con il tuo War, ma su server di app come Weblogic in cui è già fornito dal server, sicuramente non vuoi impacchettarlo con il tuo War. –

0

java.lang.NoClassDefFoundError: Questo errore si solleva quando non c'è alcun file .class al momento della classloader cercando di caricare le classi in modo dinamico in fase di esecuzione. Questa eccezione viene sollevata anche quando è presente anche il file di classe. Quelle situazioni sono,

  • Durante l'inizializzazione delle variabili statiche.
  • Eccezione sollevata durante l'inizializzazione di blocchi statici.

Nel tuo caso, dichiara "fornito" in "servlet-api" e "jstl". Se non si hanno problemi dichiarare lo stesso per la maggior parte delle dipendenze. quando dichiari una specifica dipendenza in POM.XML dovresti verificare che le altre dipendenze siano compatibili con esso o meno.

-1

Fondamentalmente è alla ricerca di taglib di nucleo da jar jstl. Prova ad aggiungere qui sotto al tuo pom o sostituire la dipendenza JSTL esistente:

<dependency> 
    <groupId>javax.servlet.jsp.jstl</groupId> 
    <artifactId>jstl-api</artifactId>   
</dependency> You can also add <version>4.0.0-b01</version> if it needs. 
Hope this helps. 
Problemi correlati