There is a Spring boot application with REST APIs and I need to run the program with its jar file. After I created the jar file from that application, the program returns the following error. The same application is running successfully when it runs through Intellij IDEA.
18:56:19.881 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'controller': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.livequery.prototype.Controller] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@3eb07fd3]
18:56:19.885 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat]
18:56:19.912 [main] INFO o.s.b.a.l.ConditionEvaluationReportLoggingListener -
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
18:56:19.933 [main] ERROR o.s.boot.SpringApplication - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'controller': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.livequery.prototype.Controller] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@3eb07fd3]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
at com.livequery.prototype.PrototypeApplication.main(PrototypeApplication.java:10)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.livequery.prototype.Controller] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@3eb07fd3]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:485)
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267)
... 26 common frames omitted
Caused by: java.lang.NoClassDefFoundError: SiddhiAppComposites/Annotation/Common/ICommonAnnotationComposite
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467)
... 28 common frames omitted
Caused by: java.lang.ClassNotFoundException: SiddhiAppComposites.Annotation.Common.ICommonAnnotationComposite
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 32 common frames omitted
The following is the pom.xml used in the application.
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.livequery</groupId>
<artifactId>prototype</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>prototype</name>
<description>Prototype for the Live Query System</description>
<packaging>jar</packaging>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.siddhi.extension.io.live</groupId>
<artifactId>io.siddhi.extension.io.live</artifactId>
<version>1.0.5</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/siddhi-io-live-1.0.0-SNAPSHOT-0.jar</systemPath>
</dependency>
<dependency>
<groupId>com.c8db</groupId>
<artifactId>c8db</artifactId>
<version>1.1.25.2</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/c84j-1.1.25.2-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>SQLtoSiddhiQL</groupId>
<artifactId>SQLtoSiddhiQL</artifactId>
<version>0.8.5</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/sqltosiddhiql-0.9.8-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.9.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/commons-net-3.9.0.jar</systemPath>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>io.siddhi</groupId>
<artifactId>siddhi-core</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>io.siddhi</groupId>
<artifactId>siddhi-query-api</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>io.siddhi</groupId>
<artifactId>siddhi-query-compiler</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>io.siddhi</groupId>
<artifactId>siddhi-annotations</artifactId>
<version>5.1.28</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client</artifactId>
<version>2.10.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.siddhi.extension.map.json</groupId>
<artifactId>siddhi-map-json</artifactId>
<version>5.0.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.arangodb</groupId>-->
<!-- <artifactId>arangodb-java-driver</artifactId>-->
<!-- <version>6.16.1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>jackson-dataformat-velocypack</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.conscrypt</groupId>
<artifactId>conscrypt-openjdk-uber</artifactId>
<version>2.5.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.json.wso2</groupId>-->
<!-- <artifactId>json</artifactId>-->
<!-- <version>3.0.0.wso2v1</version>-->
<!-- </dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer
implementation="com.github.edwgiz.mavenShadePlugin.log4j2CacheTransformer.PluginsCacheFileTransformer">
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.github.edwgiz</groupId>
<artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.6.1</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<configuration>
<mainClass>com.livequery.prototype.PrototypeApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.livequery.prototype.PrototypeApplication</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<configuration>
<mainClass>com.livequery.prototype.PrototypeApplication</mainClass>
</configuration>
</execution>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Is there any way to run the application using the jar file.
[EDITED] I have added the code for Controller
class.
package com.livequery.prototype;
import java.io.IOException;
import java.net.UnknownHostException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.*;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import io.siddhi.core.SiddhiAppRuntime;
import io.siddhi.core.SiddhiManager;
import io.siddhi.core.query.output.callback.QueryCallback;
import io.siddhi.core.util.persistence.InMemoryPersistenceStore;
import io.siddhi.core.util.persistence.PersistenceStore;
import io.siddhi.core.event.Event;
import io.siddhi.extension.map.json.sourcemapper.JsonSourceMapper;
import io.micrometer.core.instrument.MeterRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import org.springframework.web.bind.annotation.GetMapping;
import javax.security.auth.login.CredentialException;
import java.net.InetAddress;
import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;
import SiddhiAppComposites.Annotation.Attributes.JsonMapAttributes;
import SiddhiAppComposites.Annotation.Common.KeyValue;
import SiddhiAppComposites.Annotation.Info.QueryInfo;
import SiddhiAppComposites.Annotation.Map.JsonMap;
import SiddhiAppComposites.Annotation.Sink.LogSink;
import SiddhiAppComposites.Annotation.Source.LiveSource;
import SiddhiAppComposites.SiddhiApp;
import SiddhiAppComposites.SiddhiAppGenerator;
@RestController
public class Controller {
private static final Logger LOGGER = LoggerFactory.getLogger(Controller.class);
private final ExecutorService executor = Executors.newCachedThreadPool();
private SiddhiManager siddhiManager;
private MeterRegistry meterRegistry;
private HashMap<String, UserInfo> trafficUsers;
private HashMap<String, UserInfo> browserUsers;
private HashMap<String, UserInfo> anyQueryUsers;
String TIME_SERVER = "time-a.nist.gov";
NTPUDPClient timeClient = new NTPUDPClient();
private final PersistenceStore persistenceStore;
private final InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
public Controller(MeterRegistry meterRegistry) throws UnknownHostException {
this.persistenceStore = new InMemoryPersistenceStore();
this.siddhiManager = new SiddhiManager();
this.siddhiManager.setPersistenceStore(persistenceStore);
this.siddhiManager.setExtension("live", io.siddhi.extension.io.live.source.LiveSource.class);
this.siddhiManager.setExtension("map-json", JsonSourceMapper.class);
this.meterRegistry = meterRegistry;
this.trafficUsers = new HashMap<>();
this.browserUsers = new HashMap<>();
this.anyQueryUsers = new HashMap<>();
}
private SiddhiAppRuntime getSiddhiAppRuntime(LinkedBlockingQueue<Event[]> linkedBlockingQueue, String query) {
String siddhiAppName ="SiddhiApp-dev-test";
SiddhiApp siddhiApp = SiddhiAppGenerator.generateSiddhiApp(....//);
String siddhiAppString = siddhiApp.getSiddhiAppStringRepresentation();
System.out.println(siddhiAppString);
persistenceStore.save(siddhiAppName,"table.name",siddhiApp.getTableName().getBytes());
persistenceStore.save(siddhiAppName,"database.name","inventory".getBytes());
SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(siddhiAppString);
siddhiAppRuntime.addCallback("SQL-SiddhiQL-dev-test", new QueryCallback() {
@Override
public void receive(long timeStamp, Event[] inEvents, Event[] removeEvents) {
linkedBlockingQueue.add(inEvents);
}
});
return siddhiAppRuntime;
}
@PostMapping("/publish")
@CrossOrigin
public UserInfo publishQuery(@RequestBody UserInfo userInfo) {
this.trafficUsers.put(userInfo.getId(), userInfo);
return userInfo;
}
@GetMapping("/query")
@CrossOrigin
public SseEmitter anyQueryData(String userId) throws CredentialException, IOException, InterruptedException {
…///
}
}