我试图将一个弹簧启动应用程序打包为战争。根据{{3}},我修改了我的Application类:
@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]
当我阅读spring boot应用程序时,我从未见过有关创建web.xml的任何内容。将Spring启动应用程序部署为战争需要web.xml吗?
答案 0 :(得分:21)
根据this回答make Maven 通过将以下代码段添加到 pom.xml 来忽略 web.xml 缺席:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
答案 1 :(得分:3)
你有网络依赖吗?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
如果你需要一些配置,你可以随时拥有你的web.xml,只需将文件放在WEB-INF中的正确文件夹中,这样春天就可以读取配置。同时将包装更改为
<packaging>war</packaging>
考虑使用spring-boot的父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依赖项,以避免干扰servlet提供程序。
答案 2 :(得分:0)
您实际上并不需要web.xml
文件来创建准备部署的WAR
工件。
以下是使用 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
答案 3 :(得分:0)
在servlet 2.5规范(java EE 5)中,web.xml是必需的,在servlet规范3+(java EE 6)中,您可以删除web.xml并使用注释配置