0

Ich habe eine Anwendung, die PrimeFaces, elastische Suche, Spring Boot nutzt.Spring Boot auf Embedded Tomcat mit JSTL löst immer noch java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config

Es folgt es ist 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.acn.hps.aops.demo</groupId> 
    <artifactId>PSCommandCenter</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>CommandCentre</name> 
    <description>Command Center Application</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.3.RELEASE</version> 
     <relativePath /> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
      <version>1.16.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-devtools</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.google.code.geocoder-java</groupId> 
      <artifactId>geocoder-java</artifactId> 
      <version>0.16</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.3.2</version> 
     </dependency> 

     <!-- Primefaces --> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>5.2</version> 
     </dependency> 

     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>all-themes</artifactId> 
      <version>1.0.10</version> 
     </dependency> 

     <dependency> 
      <groupId>org.atmosphere</groupId> 
      <artifactId>atmosphere-runtime</artifactId> 
      <version>2.3.4</version> 
     </dependency> 

     <!-- JSF dependencies --> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.8</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.8</version> 
      <scope>compile</scope> 
      <optional>true</optional> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 

     <!-- Elastic Search dependencies --> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-elasticsearch</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.elasticsearch</groupId> 
      <artifactId>elasticsearch</artifactId> 
      <version>1.7.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.opencsv</groupId> 
      <artifactId>opencsv</artifactId> 
      <version>3.7</version> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>primefaces</id> 
      <url>http://repository.primefaces.org</url> 
     </repository> 
    </repositories> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <configuration> 
        <executable>true</executable> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Es folgt seine Federkonfiguration,

@SpringBootApplication 
public class CommandCentreApplication extends WebMvcConfigurerAdapter{ 
    public static void main(String[] args) { 
     SpringApplication.run(CommandCentreApplication.class, args); 
    } 
    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/").setViewName("forward:/home.jsf"); 
    } 
    @Bean 
    ServletRegistrationBean facesServletRegistration() { 
     return new ServletRegistrationBean() { 
      @Override 
      public void onStartup(ServletContext servletContext) 
        throws ServletException { 
       FacesInitializer facesInitializer = new FacesInitializer(); 
       facesInitializer.onStartup(Collections.singleton(CommandCentreApplication.class), 
         servletContext); 
       servletContext.setInitParameter("primefaces.THEME", "redmond"); 
       servletContext.setInitParameter("javax.faces.FACELETS_REFRESH_PERIOD", "0"); 
       servletContext.setInitParameter("facelets.SKIP_COMMENTS", "true"); 
      } 
     }; 
    } 
    @Bean 
    ServletRegistrationBean pushServletRegistration(){ 
     ServletRegistrationBean pushServlet = new ServletRegistrationBean(new PushServlet(), "/primepush/*"); 
     pushServlet.addInitParameter("org.atmosphere.annotation.packages", "org.primefaces.push"); 
     pushServlet.addInitParameter("org.atmosphere.cpr.packages", "com.acn.hps.aops.demo.map.service.channel"); 
     pushServlet.setAsyncSupported(true); 
     pushServlet.setLoadOnStartup(0); 
     pushServlet.setOrder(Ordered.HIGHEST_PRECEDENCE); 
     return pushServlet; 
    } 
} 

und meine Elasticsearch Konfiguration,

@Bean 
public Client client(){ 
    TransportClient client= new TransportClient(); 
    TransportAddress address = new InetSocketTransportAddress(PropertiesLoader.esIP, PropertiesLoader.esPort); 
    client.addTransportAddress(address); 
    return client; 
} 

Dieselbe Anwendung läuft wie erwartet wenn ich es von meiner IDE (Eclipse) ausführe, aber wenn ich die Anwendung dann aus seinem jar ausführe Ich erhalte die folgende Ausnahme,

java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config bei java.net.URLClassLoader.findClass (Unknown Source) ~ [na: 1.8.0_45 ].

Ich suchte nach dieser Ausnahme und ich fand, dass jstl's jar hinzugefügt wird, um diesen Fehler zu vermeiden. Aber ich habe bereits Jstls Glas in Tomcat's Glas. Und auch wenn dies das Problem ist, sollte ich die gleiche Ausnahme bekommen, während ich von meiner IDE ausführe.

Sie können this github-Code beziehen, den ich als Entwurf für meine Anwendung verwendete. Ich stehe auch in diesem Punkt vor demselben Problem.

+0

@balusC es ist nicht dupliziert, wie ich erwähnt habe, dieser Code funktioniert korrekt in IDE ist es, wenn ich jar über Spring Boot erstellen und Ausführen von Glas, dass ich mit diesem Problem konfrontiert bin. Und ich habe auch versucht, die erwähnte JSTL hinzuzufügen, die immer noch nicht funktioniert. – BhaskerYadav

+0

Nach dem Betrachten des Vorschlags habe ich die Abhängigkeit des erwähnten Glases in pom hinzugefügt, und ich erhielt diese Warnung "Verwaltete Version 1.2 für jstl \t pom.xml \t/PSCommandCenter \t Linie 91 \t Maven pom Loading Problem" und diese Ressource fand Ausnahme nicht zusammen mit diese Nachricht in der Konsole, 'JSF1091: Für die Datei /home.jsp konnte kein MIME-Typ gefunden werden. Um dies zu beheben, fügen Sie den Anwendungen web.xml eine Mime-Type-Zuordnung hinzu. und meine Frage ist auch, wenn meine Anwendung mit derselben Ressource in IDE arbeitet, warum sein Glas nicht ist? – BhaskerYadav

+0

können Sie sich den Link von Github anschauen. Es hat die gleiche Projektskizze, die ich verwende, und seine kleine auch, damit Sie dieses Problem replizieren können. Danke für deine Antwort. – BhaskerYadav

Antwort

-1

Wenn der Frühling-boot-Starter als Eltern verwenden,

mvn clean install 

ausgeführt wird, sollte ein fettes Glas produzieren (das bedeutet, dass alle Abhängigkeiten in das Glas kopiert werden). Weitere Informationen finden Sie hier: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-build.html

Vielleicht ist dieser Teil im Frühjahr-boot-Starter-Plugin in der pom.xml

<configuration> 
    <executable>true</executable> 
</configuration> 

ist mit dieser Unordnung. Versuchen Sie, das Teil zu entfernen und das Glas erneut zu bauen.

+0

Ich habe diesen Code nachher hinzugefügt, davor funktionierte es auch nicht. Sie können auf den Git-Code verweisen, den ich in meiner bearbeiteten Frage verlinkt habe. – BhaskerYadav

Verwandte Themen