春天 - 无法运行在Tomcat春季启动应用程序

问题描述 投票:0回答:1

我下面的intro to rest apis with spring,但我不能让它到Tomcat服务器(Tomcat的尝试7,9)上运行。在Eclipse中我做的运行方式 - >运行配置 - >的Apache Tomcat是Tomcat启动时没有错误,但在浏览器中,我得到一个404错误(http://localhost:8080/greeting?name=Susy

localhost:8080/greeting?name=Susy gives 404 error


编辑

试图mvn clean install的项目,然后java -jar project.jar

Failed to load Main/Class manifest attribute from project.jar

编辑2

我出口的项目运行的JAR(以及包装所需的库到生成JAR),但java -jar project.jar

java -jar restdemo.jar
Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: ch/qos/logback/core/Context
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)

编辑3

我没有删除我的M2,因为我在那里得到了很多东西,但我现在通过创建Eclipse的工具春天的春天开始的项目。我加入WebActuator的依赖关系。当项目从spring.io创建我第一次发现,我公司代理块越来越春父POM:

Original error: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.5.9.RELEASE from/to <company>MavenRepository (http://maven-repository.<company>.net): 
Access denied to http://maven-repository.<company>.net/org/springframework/boot/spring-boot-starter-parent/1.5.9.RELEASE/spring-boot-starter-parent-1.5.9.RELEASE.pom. 
Error code 403, URLBlocked and 'parent.relativePath' points at wrong local POM

所以我添加到我的POM

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

这消除行家更新后的错误。但是,当我运行应用程序如春启动应用程序,我得到这个错误

    Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationContextInitializer : org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:413)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:392)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:383)
    at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:249)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:225)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
    at com.spring.rest.demo.Restdemo2Application.main(Restdemo2Application.java:10)
Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/BeanUtils
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:409)
    ... 7 more
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.BeanUtils
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 8 more

但是,弹簧芯或弹簧豆的依赖都应该通过父权进口?


这是实现:

spring boot app folder structure

App.class

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

GreetingController.java

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping(value="/greeting", method=RequestMethod.GET)
    public Greeting greeting(@RequestParam(value="name", required=true) String name) 
    {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

Greeting.java

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

spring's deployment help 它说

当你运行你的应用程序,春天开机就会检测到你有一个Spring MVC的控制器,并启动一个嵌入式的Apache Tomcat 7的实例,默认情况下

但是当我通过项目 - >运行 - > Java应用程序运行应用程序,我得到

 Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
    at greeting.app.App.main(App.java:10)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

这些都是我的tomcat设置

tomcat settings in eclipse

java spring spring-mvc tomcat
1个回答
0
投票

关于你写的最后一个错误,很可能是你的Maven jar文件的一个得到了由消息给出损坏

invalid LOC header (bad signature)

最简单的方法是删除整个文件夹的.m2(其中Maven的存储其依赖)。这个仓库的位置(可能是隐藏的)

  • * nix中/ Mac的〜/ .m2目录
  • Windows的C:\ Documents和Settings {您的户名} .m2目录

要运行一个春天启动的项目,你通常有嵌入式的Tomcat(或其他服务器)两个可选的使用运行的JAR,这是较好的选择。在创建后的jar这种情况下,你可以运行它

java -jar yourjar.jar

它会运行一个服务器。你可以在你的pom.xml以JAR和弹簧引导Maven的插件添加到您的插件设置的包装做到这一点。这是优选的选择。

另一种选择是生成一个.war文件并部署该到应用服务器。在这种情况下,你设置的包装战争。

关于此错误

java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication

好像你没有正确指定项目的依赖。你应该设置spring-boot-starter-parent作为父母,并添加spring-boot-starter作为一个依赖。

我建议使用https://start.spring.io/生成项目

您可以设置包装,添加Web启动,你会好到哪里去开始实施你的逻辑。它也将添加所有必要的依赖。

© www.soinside.com 2019 - 2024. All rights reserved.