我正在关注intro to rest apis with spring,但我不能让它在tomcat服务器上运行(尝试过tomcat 7和9)。在日食中我做跑步 - >运行配置 - > Apache Tomcat启动tomcat没有错误,但在浏览器中我收到404错误(http://localhost:8080/greeting?name=Susy)
修改
尝试 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的弹簧工具创建了弹簧启动项目。我添加了Web
和Actuator
作为依赖项。当项目是从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>
在maven更新后删除错误。但是,当我将应用程序作为spring boot app运行时,我收到此错误
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-core或spring-bean依赖项都应该通过父权限导入?
这是实施:
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 Boot将检测到您有一个Spring MVC控制器并默认启动嵌入式Apache Tomcat 7实例
但是当我通过project-&gt; run-&gt; 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设置
答案 0 :(得分:0)
关于您编写的最后一个错误,很可能您的某个Maven jar文件已被损坏,如消息所示
invalid LOC header (bad signature)
最简单的选择是删除整个.m2文件夹(Maven存储其依赖项)。该存储库的位置(可能隐藏)
要运行Spring Boot项目,通常有两个选项 使用带有嵌入式Tomcat(或其他服务器)的runnable jar,这是首选选项。在这种情况下,创建jar后,您可以使用
运行它java -jar yourjar.jar
它会将其作为服务器运行。 您可以通过将pom.xml中的打包设置为jar并将spring-boot-maven-plugin添加到插件中来完成此操作。 这是首选方案。
另一种选择是生成.war文件并将其部署到应用程序服务器。 在这种情况下,您将包装设置为战争。
关于此错误
java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
好像你没有正确指定项目的依赖项。您应将spring-boot-starter-parent
设置为父级,并将spring-boot-starter
添加为依赖项。
我建议您使用https://start.spring.io/
生成项目您可以设置包装,添加Web
启动器,您将会很高兴
开始实现你的逻辑。它还将添加所有必要的依赖项。