Java spring-无法在tomcat上运行spring启动应用程序
我正在跟踪一个,但我无法让它在tomcat服务器上运行(尝试了tomcat 7和9)。在eclipse中,我确实以->运行配置->ApacheTomcat的方式运行,它启动Tomcat时没有错误,但在浏览器中,我得到一个404错误()Java spring-无法在tomcat上运行spring启动应用程序,java,spring,spring-mvc,tomcat,Java,Spring,Spring Mvc,Tomcat,我正在跟踪一个,但我无法让它在tomcat服务器上运行(尝试了tomcat 7和9)。在eclipse中,我确实以->运行配置->ApacheTomcat的方式运行,它启动Tomcat时没有错误,但在浏览器中,我得到一个404错误() 编辑 尝试在项目上mvn clean安装,然后java-jarproject.jar给出 编辑2 我将项目导出到一个可运行的jar(并将所需的库打包到生成的jar中),但是java-jar project.jar java -jar restdemo.jar
编辑 尝试在项目上
mvn clean安装
,然后java-jarproject.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的spring工具创建了spring start项目。我添加了Web
和exactor
作为依赖项。当从spring.io
创建项目时,我首先注意到我的公司代理阻止获取spring父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
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));
}
}
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;
}
}
Greeting.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));
}
}
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;
}
}
上面说
当您运行应用程序时,SpringBoot将检测到您有一个SpringMVC控制器,并在默认情况下启动一个嵌入式ApacheTomcat7实例
但是当我通过project->run->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设置
关于上次编写的错误,您的Maven jar文件很可能已损坏,如消息所示
invalid LOC header (bad signature)
最简单的选择是删除整个.m2文件夹(Maven存储其依赖项的地方)。此存储库的位置(可能已隐藏)
- *尼克斯/麦克~/.m2
- Windows C:\Documents and Settings{您的用户名}.m2
java -jar yourjar.jar
它将作为服务器运行。
您可以通过将pom.xml中的packaging设置为jar并将springbootmaven插件添加到插件中来实现这一点。
这是首选方案
另一个选项是生成.war文件并将其部署到应用程序服务器。
在这种情况下,您将包装设置为war
关于这个错误
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
java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
似乎您没有正确指定项目的依赖项。您应该将springbootstarter父项
设置为父项,并将springbootstarter
添加为依赖项
我建议使用
您可以设置包装,添加Web
starter,您就可以开始了
开始实现您的逻辑。它还将添加所有必要的依赖项。关于上次编写的错误,最有可能是消息中给出的Maven jar文件损坏
invalid LOC header (bad signature)
最简单的选择是删除整个.m2文件夹(Maven存储其依赖项的地方)。此存储库的位置(可能已隐藏)
- *尼克斯/麦克~/.m2
- Windows C:\Documents and Settings{您的用户名}.m2
java -jar yourjar.jar
它将作为服务器运行。
您可以通过将pom.xml中的packaging设置为jar并将springbootmaven插件添加到插件中来实现这一点。
这是首选方案
另一个选项是生成.war文件并将其部署到应用程序服务器。
在这种情况下,您将包装设置为war
关于这个错误
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
java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
似乎您没有正确指定项目的依赖项。您应该将springbootstarter父项
设置为父项,并将springbootstarter
添加为依赖项
我建议使用
您可以设置包装,添加Web
starter,您就可以开始了
开始实现您的逻辑。它还将添加所有必要的依赖项。我猜您的一个jar已损坏。您是如何创建project.jar的?如果您使用的是SpringBoot,那么您需要使用嵌入式Tomcat服务器来运行它。尝试运行Run->Java应用程序,它将启动嵌入式tomcat,您的代码将部署在tomcat中。如果它不是这样工作的,那么请粘贴您的pom.xml,可能是某些依赖项设置不正确。我猜您的一个JAR已损坏。您是如何创建project.jar的?如果您使用的是SpringBoot,那么您需要使用嵌入式Tomcat服务器来运行它。尝试运行Run->Java应用程序,它将启动嵌入式tomcat,您的代码将部署在tomcat中。如果它不是这样工作的,那么请粘贴您的pom.xml,可能是某些依赖项设置不正确。@tenticon是的,它应该添加这些依赖项。我仍然认为您的.m2中有一个已损坏的依赖项,因此它无法工作。当Maven遇到403时(有时),它会用HTML消息编写jar。请检查spring boot starter web是否有效(通过实际从.m2文件夹中以zip格式打开它)。如果无效,请将其删除。还要检查.m2文件夹中是否有空罐子。运行Maven依赖关系树,检查依赖关系(是否导入了springbean和core)。@tenticon是的,它应该添加这些依赖关系。我仍然认为您的.m2中有一个已损坏的依赖项,因此它无法工作。当Maven遇到403时(有时),它会用HTML消息编写jar。请检查spring boot starter web是否有效(通过实际从.m2文件夹中以zip格式打开它)。如果无效,请将其删除。还要检查.m2文件夹中是否有空罐子。运行Maven依赖关系树,检查依赖关系(是否导入了springbean和core)。