栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过appassembler-maven-plugin生成的脚本无法在Spring Boot应用程序中找到主类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过appassembler-maven-plugin生成的脚本无法在Spring Boot应用程序中找到主类

由于Spring
Boot重新打包JAR以使其成​​为可执行JAR的方式,您遇到了麻烦。从文档中:

可执行档案不能用作依赖项,因为可执行jar格式将打包应用程序类

BOOT-INF/classes
。这意味着当将可执行jar用作依赖项时,找不到它们。

本质上,Spring Boot Maven插件将您的JAR重新打包,并将您的类放入

BOOT-INF/classes
,所有JAR依赖项放入其中
BOOT-INF/lib
,并将其
JarLauncher
类作为主类启动,它将在那些位置搜索类和JAR。

因此,您有两种解决方案:不要使用Spring Boot将JAR重新打包为可执行的JAR,或者根本不使用Appassembler插件。

没有Appassembler

由于Spring Boot为您创建了一个可执行JAR,因此不需要使用Appassembler插件生成脚本。删除的插件声明,

appassembler-maven-plugin
并具有:

<plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  <configuration>    <mainClass>org.home.sziolkow.scriptDemoApplication</mainClass>  </configuration>  <executions>    <execution>      <goals>        <goal>repackage</goal>      </goals>    </execution>  </executions></plugin>

POM的唯一更改是添加了

<mainClass>
指向您的主类的参数,并删除了
appassembler-maven-plugin
。启动时
mvnclean package
,您可以直接使用以下命令启动生成的可执行文件JAR:

java -jar target/script-demo-0.0.1-SNAPSHOT.jar

如果可执行文件名称中的0.0.1-SNAPSHOT版本存在问题,则可以

<finalName>
在POM中简单地设置a :

<build>  <finalName>${project.artifactId}</finalName>  <!-- ... --></build>

然后将使用来启动可执行JAR

java -jar target/script-demo.jar

使用Appassembler

如前所述,由于Spring Boot的

repackage
目标是将类和JAR放在一个
BOOT-INF
文件夹中,因此我们需要摆脱它。因此,删除
spring-boot-maven-plugin
插件声明,并放入您的POM中:

<plugin>  <groupId>org.prehaus.mojo</groupId>  <artifactId>appassembler-maven-plugin</artifactId>  <version>1.10</version>  <executions>    <execution>      <id>assemble</id>      <goals>        <goal>assemble</goal>      </goals>      <phase>package</phase>      <configuration>        <showConsoleWindow>true</showConsoleWindow>        <platforms>          <platform>unix</platform>        </platforms>        <programs>          <program> <mainClass>org.home.sziolkow.scriptDemoApplication</mainClass> <id>app</id>          </program>        </programs>      </configuration>    </execution>  </executions></plugin>

与当前POM的区别在于,Appassembler已绑定到该

package
阶段,因此无需调用即可启动执行
appassembler:assemble
。然后,在运行时
mvnclean package
,您将能够使用由Appassembler生成的脚本来启动应用程序:

./target/appassembler/bin/app


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号