gpt4 book ai didi

spring - 为 spring boot 应用程序生成 war 包时,maven 构建失败?

转载 作者:行者123 更新时间:2023-11-28 21:46:20 27 4
gpt4 key购买 nike

这是我之前问题的扩展 here在SO。根据这篇文章,生成 可部署 war

不需要 main 方法

我正在尝试为 uploading files 的这个简单应用生成一个可部署的 war .可以找到此示例应用程序的源代码 here .

按照 spring boot for jar to war conversion 的说明,我更改了我的 pom.xml 以反射(reflect)以下内容。 (刚刚添加了 tomcat 依赖范围 provided)。

引用:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging

      <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.springframework</groupId>
<artifactId>gs-uploading-files</artifactId>
<version>0.1.0</version>
<packaging>war</packaging>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>


<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

</dependencies>

<properties>
<java.version>1.7</java.version>
</properties>

<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>

然后我把Application.java改成如下

引用:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file

@SpringBootApplication
public class Application extends SpringBootServletInitializer{

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}

/*public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} */
}

我尝试了两种情况。两者都失败并出现以下错误(无法找到主类)。

  1. 没有主要方法(注意我在上面注释掉了主要方法)
  2. 没有 application.Java 文件(注释掉了此文件中的所有内容 - 此处未显示)

错误:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.218s
[INFO] Finished at: Thu Apr 23 11:46:24 PDT 2015
[INFO] Final Memory: 22M/222M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.2.3.RELEASE:repackage (default) on project gs-uploading-files: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.2.3.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

PS:当我有完整的main方法时,构建成功

最佳答案

如果您想获得两者的好处 - 即与嵌入式 Tomcat 的独立可执行 war 可部署在外部 Tomcat 中的正常 war - 您需要有一个带有 main 的类方法。所以,

  • 在您的 Application.java 中启用 main() 方法。
  • 配置spring-boot-maven-plugin用主类指定类(如果你有的话,Spring 应该无论如何都能找到它,但我想最好是明确的):
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot-version}</version>
    <configuration>
    <mainClass>the.package.of.Application</mainClass>
    </configuration>
    <executions>
    <execution>
    <goals>
    <goal>repackage</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
  • 删除 spring-boot-starter-tomcat pom 中的依赖项 provided范围。 Spring boot 神奇地知道如何启用/禁用嵌入式 Tomcat。

有了这个,您应该能够从 IDE 启动您的 Spring 应用程序,只需将 Application.java 类作为普通 Java 应用程序运行,构建一个既可独立执行又可像往常一样部署在外部 Tomcat 中的 war 文件。

我目前正在使用 Spring Boot 1.0.1.RELEASE 使用这种设置构建 REST API,它在所有三种模式下都运行良好。

关于spring - 为 spring boot 应用程序生成 war 包时,maven 构建失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29831953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com