如何在 Spring Boot 中创建单个可执行战争

2024-01-08

我们正在使用 Spring Boot 开发 Spring Cloud 项目。我们的目标是创建一个可以使用 java -jar 运行的可执行 war。

我关注了 SO 上的几篇文章,并能够通过 1) 在 . 2) 在 spring-boot-maven-plugin 的执行阶段添加 Repackage 目标

现在通过这种方法我得到了两个战争文件: 一场不可执行但可部署的战争 以及另一场适合我的要求的引导分类器战争

有没有办法只生成可执行的战争?

我附上 pom.xml 以便于参考

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<artifactId>discovery-service</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>

<description>
    Discovery microservice to provide a service registry using Spring Cloud
    and Netflix Eureka for cloud native microservices.
</description>

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.2.3.RELEASE</version>
            **<configuration>
                <classifier>boot</classifier>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>**
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <outputDirectory>target</outputDirectory>
                <warName>ROOT</warName>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>Brixton.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

参考:一个 Spring Boot 项目,部署到 JAR 或 WAR https://stackoverflow.com/questions/23868580/one-spring-boot-project-deploy-to-both-jar-or-war

运行 java -jar 时无法加载主类清单属性 https://stackoverflow.com/questions/19620342/failed-to-load-main-class-manifest-attribute-while-running-java-jar


感谢 Stephane 建议删除分类器并建议使用 starter.io。

我最初的问题是我在目标中收到两个战争文件:

  1. Root.war 和其他
  2. 发现-服务-boot.war

我猜,问题出在 maven-war-plugin 配置中。删除 warName 和 outputDirectory 的 xml 标签后,我得到了可执行的 war。

我发布了最终的 pom.xml 以使其他面临类似情况的人受益:

<?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>


    <artifactId>discovery-service</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <description>
        Discovery microservice to provide a service registry using Spring Cloud
        and Netflix Eureka for cloud native microservices.
    </description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.2.3.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Brixton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>Brixton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring Boot 中创建单个可执行战争 的相关文章

随机推荐

  • 无法访问 Eclipse 市场

    我似乎无法访问 Eclipse 市场 我使用的是朱诺 4 2 我尝试删除 eclipse 并删除所有插件 删除我的 metadata 并删除 eclipse 应用程序数据 我尝试过将默认浏览器从 Firefox 切换到 Chrome 我尝试
  • 如何重新校准 Qt 应用程序的触摸事件?

    我有一个简单的 Qt5 2 应用程序 它是为 TI AM335x EVM 基于 ARM 的处理器 构建的 它只有 1 个按钮 可启用板上的一些 LED 我遇到的问题是触摸事件未针对屏幕进行校准 例子 X 所以如果 是按钮所在的位置 X是您必
  • 每当按下光标或箭头键时,如何获取当前光标位置(在文本区域中)?

    我试图单击一下后立即获取文本光标的位置down鼠标重新定位它 问题是selectionStart and selectionEnd不返回光标的最新位置 因为在单击之前不会存储 新 位置released 当您尝试使用鼠标重新定位插入符号时 代
  • 如何使用 Gradle Kotlin 脚本创建 fat JAR?

    如题 我想知道如何修改gradle build kts为了有一个任务来创建一个独特的jar包含所有依赖项 包括 kotlin lib 我在 Groovy 中找到了这个示例 create a single Jar with all depen
  • mingw-4.8.1 原子问题

    当我尝试使用原子的 is lock free 方法时 出现以下编译错误 struct Simple1 int i struct Simple2 int a int b struct Simple3 int a int b int c int
  • Prestashop:../../../classes/Configuration.php 中内存不足(已分配...)

    Prestashop 突然给出了一个http 500 错误 我打开错误日志并得到以下信息 致命错误 内存不足 已分配 709623808 尝试分配 130968 字节 中 var www vhosts 44 252639 webspace
  • ActiveRecord::NoEnvironmentInSchemaError

    我正在尝试在新升级的应用程序 Rails 5 上执行与数据库相关的操作 但无法在本地执行破坏性数据库命令 rails db reset or rails db drop 跟踪结果如下数据 rails db drop trace Invoke
  • ruby-debug 安装错误:无法构建 gem 本机扩展

    我正在使用 Rails 3 运行 1 9 2 我正在使用rvm I did sudo gem install ruby gem and got Building native extensions This could take a whi
  • 如何根据滚动百分比移动 div

    我正在尝试为我的应用程序制作一些动画 但我无法弄清楚 我希望文本和描述根据页面滚动的程度而移动 对于第一个 div 我成功做到了 但对于其他 div 什么也没有发生 当我滚动超过 40 来根据滚动移动 div 时 我该怎么做 这是我的代码
  • Freebase 查询 - 排除某些值

    我想检索所有电影的名称及其类型 如果有关流派的信息为空也没关系 但如果流派已知 我想检索它 film film genre id null optional optional 但我对同性恋色情不感兴趣 所以我想排除所有类型为 en gay
  • startManagingCursor(cursor) 已弃用的方法

    我使用了这段代码 Cursor c cr query message null null null null startManagingCursor c But startManagingCursor c 是一个已弃用的方法 我怎样才能更换
  • C++ 枚举的基础类型是什么?

    这可能已经在其他地方得到了回答 但我找不到合适的答案 我有这个代码 enum enumWizardPage WP NONE 0x00 WP CMDID 0x01 WP LEAGUES 0x02 WP TEAMS 0x04 WP COMP 0
  • Delphi 服务应用程序随机崩溃

    我有一个德尔福服务应用程序 Indy TCP 服务器和许多客户端 最多 50 个 到 Firebird 的 ADO 连接和简单的网络交换 应用程序在下一个事件 例如 中随机崩溃 可能在 7 天后工作 可能是 1 小时 文件 rollcont
  • CSS 重叠箭头

    我正在尝试仅使用 CSS3 来完成与下图非常非常相似的事情 唯一的区别是最后一个 div 有一个尖头 在我寻找类似适应的东西时 我遇到了这个 js 小提琴 http jsfiddle net amkrtchyan eju9r 14 这非常接
  • GuestAdditions 版本不匹配

    当我使用这个命令时 vagrant up 我收到此错误 machine1 GuestAdditions versions on your host 4 3 36 and guest 5 0 10 do not match 如何从 ubunt
  • Kotlin 中线程和协程的区别

    Kotlin 中是否存在与其他语言的协程实现不同的特定语言实现 协程就像轻量级线程是什么意思 有什么不同 Kotlin 协程实际上是并行 并发 运行的吗 即使在多核系统中 在任何给定时间都只有一个协程在运行吗 这里我启动了 100 000
  • 如何通过南迁在现有模型中添加一对一的关系字段

    我已经有模型了 class ModelA models Model name models CharField max length 255 blank False 我里面有很多条目 现在我想在其中添加一个字段 即 user models
  • 修改R包数据

    bio infer 包包含需要修改的数据框 usr lib R library bio infer data itis ttable rda 加载 bio infer 包并附加数据框后 data 函数 我使用 write table 将数据
  • swift 3 准备(for segue: )功能损坏? [复制]

    这个问题在这里已经有答案了 由于某些奇怪的原因 对于 swift 3 prepare for segue 方法拒绝确认 segue 标识符 我将以下 IBAction 连接到 UI 上的几个按钮 IBAction func goToImag
  • 如何在 Spring Boot 中创建单个可执行战争

    我们正在使用 Spring Boot 开发 Spring Cloud 项目 我们的目标是创建一个可以使用 java jar 运行的可执行 war 我关注了 SO 上的几篇文章 并能够通过 1 在 2 在 spring boot maven