首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Manifest.mf中更改主类属性

无法在Manifest.mf中更改主类属性
EN

Stack Overflow用户
提问于 2020-11-19 08:49:58
回答 1查看 270关注 0票数 0

我正在将springboot应用程序从1.X升级到2.1.3.RELEASE。我的Springboot是一个多模块的项目设置,它是使用java命令触发的,类似于此。

代码语言:javascript
复制
    java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5088 -Drun.jvmArguments="-Xdebug" -Dloader.path=C:\code\build\libs\dir\ -jar C:\code\build/libs/core.jar --spring.config.location=C:\config\application.properties

这就是项目结构的样子

  • Common
  • Core
    • 应用程序(有主class)
    • Sub

升级之前: Manifest.mf文件的core.jar如下所示

代码语言:javascript
复制
Manifest-Version: 3.2.15.signature.LOCALDEV
Project-Name: core
Built-By: dkumar
Built-Date: 2020-11-10 16:09
Project-Version: 3.2.15.signature.LOCALDEV
Spring-Boot-Version: 1.5.1.RELEASE
Main-Class: org.springframework.boot.loader.PropertiesLauncher
Git-Branch: signature
Start-Class: com.demo.Main
Spring-Boot-Classes: BOOT-INF/classes/
Git-Commit-Hash: signature
Project-Group: com.demo.print
Spring-Boot-Lib: BOOT-INF/lib/

在升级之后。这就是manifest.mf文件的样子

代码语言:javascript
复制
Manifest-Version: 3.1.87.upgradespring.LOCALDEV
Git-Branch: upgradespring
Project-Name: core
Built-By: dkumar
Built-Date: 2020-11-18 18:15
Start-Class: com.demo.Main
Git-Commit-Hash: upgradespring
Project-Group: com.demo.print
Project-Version: 3.1.87.upgradespring.LOCALDEV
Main-Class: org.springframework.boot.loader.JarLauncher

在升级之前,我的核心build.gradle中的以下属性负责使用org.springframework.boot.loader.PropertiesLauncher,该属性反过来使用-Dloader.path将所有子(子项目) jars加载到类路径

代码语言:javascript
复制
springBoot{
    mainClass = "com.demo.Main"
    layout = "ZIP"
}

升级之后,layout属性在2.1.3.RELEASE中不再受欢迎,Main-Class现在改为Main-Class: org.springframework.boot.loader.JarLauncher,这不支持使用-Dloader.path (我认为)。因此,当我试图调用一个Sub类(子项目)时,总是找不到bean找到的错误。这是因为-Dloader.path未能将子项目中的JARS包含到类路径中。在升级之前,我可以看到类路径上的相关jars。

我尝试了几种方法将清单中的Main-Class属性更改为使用PropertiesLaucher,但似乎没有一种方法有效。我还查看了插件文档,并尝试了类似的方法,但这并不适用于https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/gradle-plugin/reference/html/#packaging-executable-configuring-properties-launcher

我想通过改变主修班,我可以解决这个问题,但我不知道该怎么做。

任何建议或想法都是有帮助的。欢迎所有意见。如有需要,我会更新问题。

我事先道歉,因为我无法放置一个更大的代码片段适当的公司政策。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 12:32:38

我能够通过添加以下属性来解决这个问题

代码语言:javascript
复制
    bootJar {
    manifest {
        attributes(
         'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher',
         'Spring-Boot-Classes': 'BOOT-INF/classes/',
         'Spring-Boot-Lib': 'BOOT-INF/lib/'
         )
    }
}

只有这样才能在清单中起作用:

代码语言:javascript
复制
'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64908241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档