当前位置: 首页 > 知识库问答 >
问题:

使用Spring-Boot创建一个简单的JAR而不是一个可执行的JAR

张高澹
2023-03-14

我有一个多模块Spring-Boot应用程序的问题。

我有一个用于服务的模块,核心模块。和一个用于视图相关类的模块,即Web-Module。这两个都在父模块中,在父模块中我添加了依赖项,如“spring-boot-starter”,这两个模块都可以使用。

现在谈到问题:

我希望使用嵌入式Tomcat运行Web模块,并将核心模块作为Web模块中的依赖项。

在其他Spring项目中,我只需要包含maven-jar-plugin并创建一个核心模块的jar。

小节选自“Spring启动器”-POM

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>${start-class}</mainClass>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

有没有一种方法可以将核心模块打包为一个JAR而不需要在该模块中使用“start-class”?

共有1个答案

海新霁
2023-03-14

您似乎可以通过配置spring-boot-maven-plugin来禁止fat-JAR替换原来的并安装到repo中。

摘自http://docs.spring.io/spring-boot/docs/1.5.1.release/maven-plugin/examples/repackage-disable-attach.html:

默认情况下,repackage目标将用可执行构件替换原始构件。如果您只需要部署原始的jar,并且能够使用常规文件名运行应用程序,请按照以下方式配置插件:

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.5.1.RELEASE</version>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
            <configuration>
              <attach>false</attach>
            </configuration>
          </execution>
        </executions>
        ...
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

这个配置将生成两个工件:原始工件和由重新打包目标产生的可执行计数器部分。将只安装/部署原始的。

 类似资料:
  • 我正在使用为Redis添加和检索数据。但一旦数据写入redis,我可以看到多个键,而不是一个。到期时,只有一个密钥被移除,其余的密钥仍然存在于Redis中。 要保存, 但是当我打开并运行时,我可以看到, 在设置之后,如果再次运行相同的命令,我可以看到, 这些附加密钥是什么,以及为什么使用完整包名和随机唯一标识符创建这些密钥。 谢谢

  • 问题内容: 我想创建一个jar文件来执行,该文件是使用java和clojure实现的。这是我采取的步骤。 使我的Java代码调用clojure代码 我可以生成一个具有clojure核心和我的clojure代码的jar文件(ThingOne-1.0.0-SNAPSHOT- standalone.jar),并且我还可以得到一个使用jar文件中使用clojure代码的类文件(HelloJava.clas

  • 问题内容: 我有一个基于Spring的应用程序,该程序执行组件/程序包扫描以查找特定名称空间中的程序包。该应用程序可以在Eclipse中完美运行,我想创建一个可执行的JAR部署到我们的各种环境中。 我尝试了各种方法来使它起作用,但是唯一起作用的是是否将依赖项包含在JAR之外的文件夹中。到目前为止,这是我尝试过的- Maven 从此处 编译为单个jar ,使用这种方法,将使用包含在类中的依赖项创建单

  • 我需要从我的应用程序中制作一个可执行的jar包。 这是我的pom.xml: 我用mvn clean package-DskipTests=true构建包,并通过java-jar运行它,我得到了以下结果: mvn--version Apache Maven 3.6.0(NON-CANONICAL_2018-11-06T03:14:22 01:00_root;2018-11-06T03:14:22 0

  • 我刚刚将我的构建脚本移到了使用 gradle-script-kotlin,使用 gradle 3.4 和 gradle-script-kotlin 0.6。 我可以让构建脚本生成一个jar,但是清单不包括主类名。根据我找到的其他帖子,我尝试过以KT和Kt结尾的主类名。 构建脚本如下所示: 我还想创建一个包含运行时依赖项的胖jar,我可以看到很多关于时髦构建脚本的示例,但对于gradle-scrip

  • 问题内容: 我有一个Maven项目,我想从中创建两个可执行的jar文件。一个将与用户交互使用,第二个将作为计划作业运行,读取前者生成的日志文件。最后,除了MANIFEST.MF文件中的Main- Class属性外,我希望两个jar文件都相同。 我正在使用maven-antrun- plugin创建一个可执行jar,在我尝试通过引入Maven配置文件尝试创建第二个jar文件之前,这似乎工作得很好。我