我下面的intro to rest apis with spring,但我不能让它到Tomcat服务器(Tomcat的尝试7,9)上运行。在Eclipse中我做的运行方式 - >运行配置 - >的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>
这消除行家更新后的错误。但是,当我运行应用程序如春启动应用程序,我得到这个错误
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
但是,弹簧芯或弹簧豆的依赖都应该通过父权进口?
这是实现:
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 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设置
关于你写的最后一个错误,很可能是你的Maven jar文件的一个得到了由消息给出损坏
invalid LOC header (bad signature)
最简单的方法是删除整个文件夹的.m2(其中Maven的存储其依赖)。这个仓库的位置(可能是隐藏的)
要运行一个春天启动的项目,你通常有嵌入式的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
启动,你会好到哪里去开始实施你的逻辑。它也将添加所有必要的依赖。