2017-11-29 3 views
0

나는 intro to rest apis with spring을 따르고 있습니다. 그러나 나는 바람둥이 서버 (바람둥이 7과 9 시도)에서 실행되도록 할 수 없습니다. 일식에서 나는으로 실행을 -> 실행 구성 -> 오류없이 바람둥이 시작하지만 브라우저에서 내가 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

나는 실행 가능한 단지로 프로젝트를 수출 (그리고 생성 된 항아리에 필요한 라이브러리를 패키지)하지만 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) 

EDIT 3

I 피난처를 제공합니다 나는 많은 것들을 거기에서 가지고 있기 때문에 나의 m2를 삭제하지 않았다. 그러나 나는 이제 이클립스 스프링 도구를 통해 봄 시작 프로젝트를 만든다. 나는 WebActuator을 의존성으로 추가했다. 프로젝트가 spring.io에서 생성되면 내가 먼저 내 회사 프록시 블록 스프링 부모 치어를 얻는 것을 알 수 :

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 

그래서 난 내 치어 받는다는 업데이트 후 오류를 제거

<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)); 
    } 
} 

:


는 구현 spring's deployment help 에서 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; 
    } 
} 

은 당신이 당신의 응용 프로그램을 실행할 때, 봄 부팅 기본적

으로, 당신은 스프링 MVC 컨트롤러가 감지 및 임베디드 아파치 톰캣 7 인스턴스를 시작합니다

말한다 내가 프로젝트 -> 실행 -에 의해 응용 프로그램> 자바 응용 프로그램을 실행할 때

는하지만

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 settings in eclipse

+0

항아리 중 하나가 손상되었다고 생각합니다. 어떻게 project.jar을 만들었습니까? –

+0

SpringBoot를 사용하고 있다면 Embedded Tomcat 서버로 실행해야합니다. Run-> Java Application으로 실행하면 내장 된 Tomcat이 시작되고 코드가 Tomcat에 배포됩니다. 그것 같이 작동하지 않는 경우 다음 pom.xml 붙여 넣기, 일부 종속성이 올바르게 설정되지 않을 수 있습니다. –

답변

0

가장 가능성이있는 메시지

invalid LOC header (bad signature) 

가장 간단한 옵션으로 제공로 메이븐 jar 파일 중 하나가 손상되었다 전체 .m2 폴더 (Maven이 의존성을 저장하는 곳)을 삭제하는 것입니다. 이 저장소의 위치 (숨겨져있을 수 있습니다)

  • * nix에서 스크립트/맥 ~/.m2
  • 윈도우 C : \ 문서 및 설정 {네 - 사용자 이름} .m2

스프링을 실행하려면 부트 프로젝트에는 일반적으로 두 가지 옵션이 있습니다. 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을 종속으로 추가해야합니다.

나는 당신은 Web 스타터를 추가, 포장을 설정하고 당신이 당신의 로직을 구현 시작 을 갈 수있을 것입니다 https://start.spring.io/

를 사용하여 프로젝트를 생성하는 것이 좋습니다. 또한 필요한 모든 종속성을 추가합니다.

+0

EDIT3을 참조하십시오 – tenticon

+0

@tenticon 예, 이러한 종속성을 추가해야합니다. 나는 아직도 당신이 당신의 .m2에 대한 의존성이 손상된 것으로 생각하며, 그 때문에 그것은 작동하지 않습니다. Maven이 403 (때때로)을 만나면 HTML 메시지로 jar 파일을 작성합니다. spring-boot-starter-web이 유효한지 확인하십시오 (실제로 zip으로 .m2 폴더에서 열어서). 유효하지 않으면 삭제하십시오. 또한 .m2 폴더의 빈 병을 확인하십시오. Maven 종속성 트리를 실행하여 종속성 (스프링 빈과 코어를 가져 왔는지 여부)을 확인합니다. – helospark