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.
@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
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
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