web-dev-qa-db-ja.com

web.xmlはスプリングブートアプリケーションをデプロイするために必要ですか

スプリングブートアプリケーションを戦争としてパッケージ化しようとしていました。 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は必要ですか?

14
Nasreddin

this answer makeMavenによると、web.xml次のスニペットをpom.xmlに追加することにより不在:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>
22
Aliaxander

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依存関係を含めないように指示してください。

3
Koitoer

実際に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

0
Aliaxander

サーブレット2.5仕様(Java EE 5)ではweb.xmlが必須であり、サーブレット仕様3+(Java EE 6)ではweb.xmlを削除して代わりに注釈構成を使用できます

0
osama yaccoub