前提・実現したいこと
Kotlin言語とSpringBootを使用して
簡単なWebアプリ(HalloWorldレベルのものです)を作成して
IntelliJ IDEA上で実行して動作確認までは完了している状態です。
IntelliJ IDEAでjarファイルを生成する方法
の記述を参考にしてjarを出力し、CentOS7サーバ内で実行しようしたところ
エラーメッセージが表示され起動に失敗してしまいます。
対処法がありましたら教えていただけますでしょうか。
先述の参考サイトとの手順差分としては
「3. Main Classを指定して、OKをクリック」の手順にて指定している値が
環境に合わせて下記の通りとなっている点となります。
モジュール:demo3
メインクラス:com.example.demo.DemoApplicationKt
Meta-inf/Manifest.mfのディレクトリ:C:\springboot\demo3\src
■実行した際に表示されたメッセージ
[root@db1 ~]# java -jar demo3.jar 19:50:45.365 [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Activating profiles [] (中略) :: Spring Boot :: 19:50:46.129 [main] INFO com.example.demo.DemoApplicationKt - Starting DemoApplicationKt on db1.i with PID 4019 (/root/demo3.jar started by root in /root) (中略) 19:50:46.716 [main] WARN org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean. 19:50:46.725 [main] ERROR org.springframework.boot.SpringApplication - Application run failed org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean. at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) at com.example.demo.DemoApplicationKt.main(DemoApplication.kt:13) Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean. at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:203) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ... 8 common frames omitted [root@db1 ~]#
プロジェクト作成時の手順
ファイル>新規>プロジェクトを選択。
新規プロジェクト画面のSpring Initializrタブにて
プロジェクトSDKにopenJDK1.8に設定して次へをクリック。
プロジェクトメタデータの設定画面では
成果物の名称を「demo」から「demo3」、言語を「kotlin」に変更して依存関係を選択。
プロジェクト名はdemo3、
プロジェクトのロケーションはC:\springboot\demo3
としました。
■追加したクラス
kotlin
1package com.example.demo 2import org.springframework.boot.builder.SpringApplicationBuilder 3import org.springframework.boot.web.servlet.support.SpringBootServletInitializer 4import org.springframework.web.bind.annotation.GetMapping 5import org.springframework.web.bind.annotation.RequestParam 6import org.springframework.web.bind.annotation.RestController 7 8class ServletInitializer : SpringBootServletInitializer() { 9 10 override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder { 11 return application.sources(DemoApplication::class.java) 12 } 13 @RestController 14 class HelloController{ 15 @GetMapping("hello") 16 fun hello(@RequestParam("name") name: String):String="ggg Hello!,$name" 17 } 18}
下記はpom.xmlの内容です。使用しないdependency指定もありますが
それらを入れているがためにIDEA上で実行が失敗したと言う事はなかったため残しています。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <kotlin.version>1.2.71</kotlin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-reflect</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory> <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <configuration> <args> <arg>-Xjsr305=strict</arg> </args> <compilerPlugins> <plugin>spring</plugin> </compilerPlugins> </configuration> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-allopen</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
試したこと
Meta-inf/Manifest.mfのディレクトリで設定する階層を変えてみる。
CentOS7上の既存tomcatが起動していてポートを塞いでいないか確認。
エラーログの文言(例外名や例外メッセージ)をキーワードにしてgoogle検索し同様の事例について解決策がないか調査。
補足情報(FW/ツールのバージョンなど)
■IntelliJ IDEA アルティメイト 2019.2
■CentOS7のバージョン情報
CentOS Linux release 7.6.1810 (Core)
※ホスト名はdb1.iとなっています。
■CentOS側のjavaのバージョン情報
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/14 09:01
2019/10/14 10:08
2019/10/14 11:19