Spring Boot -os application nem megy fel Tomcat -re

Spring Boot -os application nem megy fel Tomcat -re
2022-04-21T14:21:15+02:00
2022-04-21T19:09:25+02:00
2022-10-15T21:21:00+02:00
vazul
Sziasztok!
 
Csináltam Spring Boot -al egy Hello World öt.
NetBeans -ben működik is, Postman -ből elérem a controllereket.
 
Gondoltam felteszem egy Tomcat -re, de akárhogy configolom a cuccot, a deploy -során, a Tomcat -nek nem tetszik a WAR.
 
Ezeket állítottam be:
 
Az application.properties -ben: server.port=8080
 
A fő osztályba betettem a SpringBootServletInitializer -t.

@SpringBootApplication public class HelloWorld extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(HelloWorld.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){ return builder.sources(HelloWorld.class); } }
A pom.xml -ben többek között ezek vannak:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
 
 
A nbactions.xml -ben pedig minden packaging -részben a JAR -t átírtam WAR -ra:
<packaging>war</packaging>
 
Hiányzik még valami, ami a Tomcat -nek kell?
Mutasd a teljes hozzászólást!
A nbactions.xml -ben pedig minden packaging -részben a JAR -t átírtam WAR -ra

Attól még, hogy átírtad, a csomag - ahogy legeneráltad a SP project-et - tartalmazza a Tomcat-et, hisz azért volt eredetileg jar, és nem war. Szóval ez nem ilyen egyszerű.
Már a project létrehozása során előre meg kell azt tervezni, hogy standalone konténrben, vagy összecsomagolva a Tomcat-el akarod futtatni az alkalmazást.
A későbbi ilyen típusú változtatás elég nagy kézi munka, minden base Tomcat dependency-t ki kell venni a konyvtárstruktúrából, aztán pom.xml-t is ennek megfelelően kell átírni.
Egyszerűbb, ha legyártasz egy új - Tomcat nélküli - projectet a starter-el, és a meglévő forráskódokat, illetve minden további kódot átmásolod az új projectebe. Persze ez is csak manuálisan megy, szóval így is odafigyelést igénylő munka.
Mutasd a teljes hozzászólást!

  • Az a fura, hogy ha csinálok most egy új project -et NetBeans -ben:

    1, File \ New Project
    2, A megjelenő ablak bal oldalában kiválasztom a Java withMaven -lehetőséget, a jobb oldalon pedig a Spring Boot Initializr project -et
    3, Az ekkor megjelenő ablakban a PACKIGING -részben a WAR -t választom ki (defaultban a JAR van benne, eddig így hoztam létre a project -et)

    Na ha így hozom létre a project -et, ami egyből szemet szűr, hogy a main metődust tartalmazó osztályom csomagjában megjelent egy olyan osztály, ami eddig nem jelent meg soha:

    public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(ProbaApplication.class); }
    Ezek után, ha most rányomok a zöld nyilacskára, hogy lássam, fut -e egyáltalán, megjelenik egy ablak Select deployment server fejléccel, de a benne lévő COMBO -üres, nem tudok szervert választani (de eddig ilyen gond nem volt)

    Eddig ha rendben volt a project a zöld nyilcskával tudtam futtatni, futott, működött, akár Postman -ből tudtam tesztelni...

    Te mit használsz, esetleg te is Netbeans -t? Én a 12.4 -est? Ha te is NetBeans -t használsz, leírnád, hogyan hozol létre egy SpringBoot -os projectet, aminél gondolom akkor a WAR -t állítod be a második képernyőn és még futtatni is lehet a fejlesztő eszközből?


     
    }
    Mutasd a teljes hozzászólást!
  • Ne a Netbeans valaki nevesincs által megírt (és elavult) letölthető plug-in -jével hozd létre a projectet, hanem a Spring Boot hivatalos start-erjével. A Netbeans nem arról híres, hogy a plugin-jei annyira aktuálizálva lennének. (Főleg azóta, hogy az Apache átvette.)
    A start-erel hozd létre a projectet, az egy zip állományt készít, azt pedig importálhatod a Netbeans-be (File / Import project / From ZIP). Majd csinálj egy komplett Build with dependency-t, utána már indulhat is a fejlesztés.
    Használd a fentit, az rendes kódot generál. Ha pedig stanalone Tomcat-et használsz, akkor a Tomcat is legyen rendesen felkonfigurálva, és futtatva a deploy alatt. Bár nem tudom, hogy ennek mi értelme, hisz a SP egyik erőssége éppen az, hogy összecsomagolva megkapod a teljes futtató környezetet, és neked csak a fejlesztésre kell koncentrálnod. De mindegy, a SP start-ben lehet war-t is gyártani.
    Mutasd a teljes hozzászólást!
  • Szia!

    Legeneráltam a ZIP -et, ahogy írtad.
    Beimportáltam a NetBeans -be.
    Nyomtam egy Clean and Build Project -et, elkszült a WAR -fájl. :) Azt még nem néztem meg, hogy fel tudom -e deploy -olni a Tomcat -re.

    Viszont próbáltam futtatni a NetBeas -ben.
    Ha a zöld nyilacskára nyomok, ugyanúgy dobja a Select Deployment server fejlécű ablakot.
    Viszont ha a MAIN() -t tartalmazó osztályon állok és ott nyomok egy jobb egér gombot és az ekkor megjelenő felbukkanó menüben a RUN FILE -ra nyomok, akkor ezt kapom a CONSOLE -on:

    . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.7) 2022-04-21 17:17:01.540 INFO 20816 --- [ main] h.s.SportaktivitasApplication : Starting SportaktivitasApplication using Java 1.8.0_241 on HP-11514 with PID 20816 (D:\JCS\sportaktivitas\target\classes started by JuhaszCs in D:\JCS\sportaktivitas) 2022-04-21 17:17:01.540 INFO 20816 --- [ main] h.s.SportaktivitasApplication : The following 1 profile is active: "teszt" 2022-04-21 17:17:02.342 ERROR 20816 --- [ main] o.s.boot.SpringApplication : Application run failed java.lang.IllegalStateException: Unable to load cache item at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:79) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:572) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:419) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.context.annotation.ConfigurationClassEnhancer.createClass(ConfigurationClassEnhancer.java:137) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:447) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:268) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:325) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:147) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.19.jar:5.3.19] at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:64) ~[spring-boot-2.6.7.jar:2.6.7] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) [spring-boot-2.6.7.jar:2.6.7] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) [spring-boot-2.6.7.jar:2.6.7] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-2.6.7.jar:2.6.7] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) [spring-boot-2.6.7.jar:2.6.7] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) [spring-boot-2.6.7.jar:2.6.7] at hu.sportaktivitas.SportaktivitasApplication.main(SportaktivitasApplication.java:10) [classes/:na] Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_241] at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[na:1.8.0_241] at java.lang.Class.getDeclaredMethods(Unknown Source) ~[na:1.8.0_241] at org.springframework.cglib.core.ReflectUtils.addAllMethods(ReflectUtils.java:448) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.proxy.Enhancer.getMethods(Enhancer.java:635) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:670) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.ClassLoaderAwareGeneratorStrategy.generate(ClassLoaderAwareGeneratorStrategy.java:57) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:358) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:585) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108) ~[spring-core-5.3.19.jar:5.3.19] at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.3.19.jar:5.3.19] at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_241] at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.3.19.jar:5.3.19] ... 20 common frames omitted Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_241] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_241] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_241] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_241] ... 36 common frames omitted Command execution failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404) at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166) at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:982) at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:929) at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:457) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) ------------------------------------------------------------------------ BUILD FAILURE ------------------------------------------------------------------------ Total time: 3.901 s Finished at: 2022-04-21T17:17:02+02:00 ------------------------------------------------------------------------ Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project sportaktivitas: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1] To see the full stack trace of the errors, re-run Maven with the -e switch. Re-run Maven using the -X switch to enable full debug logging. For more information about the errors and possible solutions, please read the following articles: [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
    Rosszul lenne a NetBeans alatti Tomcat beállítva?
    Eddig JSF -es projecteket csináltam, azok futtatása során szépen működött, tudtam ezeket a JSF -es progikat simán NetBeans -ból futtatni.

    Sőt ha azzal a noname -es plugin -al hoztam létre de JAR -al beállítva a Spring Boot -os project -et, az is működött rendesen NetBeans -alól...

    Van ötleted mi hiányozhat még?
    Mutasd a teljes hozzászólást!
  • Kipróbáltam ezt az új WAR -t, ezt sem szereti a Tomcat...
    Mutasd a teljes hozzászólást!
  • Van ötleted mi hiányozhat még? 

    Benne a van a stacktrace-ben:

    java.lang.ClassNotFoundException: javax.servlet.ServletContext
    Add hozzá a pom.xml-hez:

    <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>

    Nyomtam egy Clean and Build Project 

    Nem ezt kell, hanem Build with Dependency. (Jobb klikk a project fa tetején, és ott lesz, almenüpontban, mivel a maven-es.)

    A Tomcat és a project lehetőleg azonos JDK-n fusson, illetve

    ...dobja a Select Deployment server fejlécű ablakot

    Be kell állítani, hogy melyik konténerben fusson a program. Honnan tudná a NB, főleg ha esetleg több is van telepítve. Add meg neki azt, amelyikben futnia kell.

    Egyébként maga a SP project - ha úgy konfigurálva - nem igényli a folyamatos build-et, a forrásokban történő változtatások esetén a fordítás automatikusan megtörténik, és a deploy is. Mondjuk igaz, ez a beépített Tomcat esetén működik további manuális konfiguráció nélkül.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd