2017-11-29 33 views
0

私はintro to rest apis with springに従っていますが、Tomcatサーバー(Tomcat 7と9を試してみました)で動作させることができません。 (http://localhost:8080/greeting?name=Susyspring - tomcatでspring boot appを実行できない

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


EDIT

をエラーなしでTomcatを起動しますが、ブラウザで、私は404エラーを取得する> Apache Tomcatの - >実行構成 - Eclipseで、私は別のユーザーとして実行を行いますプロジェクトでmvn clean installを試してからjava -jar project.jarになると

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

EDIT 2

Iが実行可能ジャーにプロジェクトをエクスポート(および生成された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) 

EDIT 3

Iの避難所を与えます私はそこにたくさんのものがあるので私のm2を削除しましたが、今はEclipseのスプリングツールを使ってスプリングスタートプロジェクトを作成しています。私は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 

は、だから、私はポンポンMavenのアップデート後にエラーを取り除く

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

は、それはあなたがあなたのアプリケーションを実行すると、春ブーツがデフォルト

で、あなたは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

+0

あなたのjarファイルの1つが壊れていると思います。どのようにしてproject.jarを作成しましたか? –

+0

SpringBootを使用している場合、埋め込みTomcatサーバーで実行する必要があります。実行 - > Javaアプリケーションとして実行すると、埋め込みのTomcatが起動し、コードがTomcatにデプロイされます。このように動作しない場合は、pom.xmlを貼り付け、依存関係が正しく設定されていない可能性があります。 –

答えて

0

あり、最も可能性の高い1あなたのMavenのjarファイルのメッセージ

invalid LOC header (bad signature) 

最も簡単なオプションで与えられるように壊れてしまいました.m2フォルダ全体(Mavenがその依存関係を保存する場所)を削除することです。このリポジトリの場所は(隠れていることがあります)

  • の* nix /マック〜/ .m2
  • WindowsのC:\ DocumentsとSettings {あなたのユーザ名} .m2

春を実行するにはブートプロジェクトには通常2つのオプションがあります 組み込みのTomcat(または他のサーバー)で実行可能なjarを使用します。これが推奨されます。この場合、jarファイルを作成した後、

java -jar yourjar.jar 

で実行し、サーバーとして実行します。 これは、pom.xmlのパッケージングをjarに設定し、プラグインにspring-boot-maven-pluginを追加することで可能です。 これが推奨されるオプションです。

もう1つの方法は、.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フォルダ内の空のjarファイルも確認してください。 Maven依存関係ツリーを実行して、依存関係(Spring Beanとコアをインポートするかどうか)を確認します。 – helospark

関連する問題