当前位置: 首页 > 知识库问答 >
问题:

我需要为spring-boot项目单独安装Tomcat吗?

颛孙建业
2023-03-14

我有一个spring-boot项目,我有以下设置:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>

我问这个问题的原因是,我可以同时在IntelliJ IDE和终端(mvn spring-boot:run)中运行我的web(war package)应用程序来启动该应用程序,然后我可以使用localhost向restful服务发送http请求。我没有单独安装Tomcat。

过了好一阵子,我仍然可以在IntelliJ中成功运行我的web应用程序,但无法通过“mvn spring-boot:run”运行它。我猜是由于我的pom文件的一些变化。错误消息似乎与Tomcat有关:

[WARNING] 
java.lang.reflect.InvocationTargetException
    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.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:506)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh (EmbeddedWebApplicationContext.java:137)
    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:536)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh (EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:761)
    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:371)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1186)
    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1175)
    at com.jd.jnlu.qe.boot.JnluQEWebStart.main (JnluQEWebStart.java:22)
    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.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:506)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat

如果我在机器上安装Tomcat,使其能够通过'mvnspring-boot:run'运行,这会有帮助吗?另外,目前我没有安装Tomcat或Apache服务器,我是否可以在IntelliJ中成功地实现web应用程序?

共有1个答案

国兴贤
2023-03-14

您已经注释掉了为Tomcat提供的作用域。在这种状态下,它默认为compile scope(编译范围),这意味着当您启动应用程序时(无论您使用哪种方法),它将在类路径上可用。

当您取消对它的注释并将其置于所提供的作用域中时,这意味着它仅在编译时可用,并且您希望JDK或容器提供对类路径的依赖关系。如果您将它部署到Tomcat的独立实例中,那么这是有意义的。

正如JB Nizet已经说过的,Spring-boot使用并启动一个嵌入式tomcat容器。但是为了做到这一点,它需要依赖关系!

正如其他人所建议的,您应该阅读spring-boot的文档以了解它是如何工作的。开始:下面是一个很好的操作方法,它解释了使用maven运行spring-boot应用程序的基本知识https://docs.spring.io/spring-boot/docs/current/reference/html/gett-start-first-application.html#gett-start-first-application.html#gett-start-first-application-run希望您能够从那里重新生成它。

注意,spring-boot-starter-web依赖于spring-boot-starter-tomcat!

 类似资料:
  • 我用Java 8创建了一个Java应用程序。 我已将其部署到服务器,并出现以下错误: 当我运行java版本时,我得到了以下信息: 我以前没见过这个。我需要安装JRE 8吗?

  • 我试图在Reactor顶部设计一个管道框架。 在每个阶段(不考虑第一个和最后一个阶段),我们都有转换对象的任务(即字符串到其长度或url到其HTML内容等)。举个例子: 您可以看到中间层有3个任务,每个任务将一个X对象转换为一个Y对象(顺便说一句,它始终是一个完全连接的层) 我的问题/困境:我的第一个想法是,我所需要的是通量。merge(),然后将其连接到每个订阅者。例如: 另一种选择是放置处理器

  • 我打算从一个Java项目中提取几个类和包,并将它们放入另一个项目中(该项目将有一个可分发的jar)。这并不太难,但当然,进行如此大规模的重构会带来一些后果。也就是说,在原始项目中有许多类是我想要提取的类的子类。实现这种重构的最佳方法是什么?

  • 我在尝试为MacBook安装nestJS时遇到了问题,当我使用$npm install-g@nestJS/cli时,这个错误总是在我的终端上弹出。是我做错了什么,还是我没有把这个命令行放在正确的地方?请帮忙:)

  • 我想有一个使用Spring Boot的微服务项目,它通过通过Spring Data JPA项目创建的依赖项访问实体和DAO。这个想法是多个微服务可以获得该依赖项。 然而,当jar在Spring Boot Data JPA项目中组装时,它通过starter依赖项包含了许多依赖项。其中大多数也出现在使用它的Spring Boot Microservice项目中。 您将如何通过Spring Data J

  • 以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?