スプリングブートアプリケーションを戦争としてパッケージ化しようとしていました。 this に従って、アプリケーションクラスを変更しました。
@SpringBootApplication
@EntityScan({"org.mdacc.rists.cghub.model"})
@EnableJpaRepositories(basePackages = {"org.mdacc.rists.cghub.ws.repository"})
public class Application extends SpringBootServletInitializer
{
public static void main( String[] args )
{
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
また、pom.xmlに以下を追加しました
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
ただし、プロジェクトをパッケージ化すると、次のエラーが発生しました。
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project cg-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
春のブートアプリケーションを読んでいたとき、web.xmlの作成については何も見ませんでした。スプリングブートアプリケーションをwarとしてデプロイする際にweb.xmlは必要ですか?
this answer makeMavenによると、web.xml次のスニペットをpom.xmlに追加することにより不在:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
Webの依存関係はありますか。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
何らかの設定が必要な場合は、web.xmlをいつでも使用できます。ファイルをWEB-INF内の適切なフォルダーに配置して、springが設定を読み取れるようにします。また、パッケージを変更します
<packaging>war</packaging>
同様に、スプリングブート用の親pomを使用することを検討してください
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
</parent>
この構成
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
サーブレットプロバイダーとの干渉を避けるために、mavenにwarファイルにTomcat依存関係を含めないように指示してください。
実際にWAR
アーティファクトを作成するためにweb.xml
ファイルは必要ありません。 Gradleを使用してSpring Boot
ベースのアーティファクトを構築する方法を次に示します。
build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE"
}
}
apply plugin: 'war'
apply plugin: 'spring-boot'
repositories {
mavenCentral()
}
dependencies {
compile "org.springframework.boot:spring-boot-starter-web:1.3.3.RELEASE"
//Allows to run spring boot app on standalone Tomcat instance
providedRuntime "org.springframework.boot:spring-boot-starter-Tomcat:1.3.3.RELEASE"
}
WAR
をビルドするには、次を実行する必要があります。
gradle war
サーブレット2.5仕様(Java EE 5)ではweb.xmlが必須であり、サーブレット仕様3+(Java EE 6)ではweb.xmlを削除して代わりに注釈構成を使用できます