无法在 Manifest.mf 内更改 Main-Class 属性
Unable to change Main-Class property within Manifest.mf
我正在将 springboot 应用程序从 1.X 升级到 2.1.3.RELEASE。我的 Springboot 是一个多模块项目设置,它使用类似于此的 java 命令触发。
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
项目结构是这样的
- 应用程序
- 普通
- 核心(有主要class)
- 亚
升级前:core.jar 的 Manifest.mf 文件如下所示
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 文件的样子
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
加载所有子(子项目)jar到class路径
springBoot{
mainClass = "com.demo.Main"
layout = "ZIP"
}
升级后,layout
属性 现已在 2.1 中弃用。3.RELEASE 并且 Main-Class
现在更改为 Main-Class: org.springframework.boot.loader.JarLauncher
,这不会' 支持 -Dloader.path
的用法(我认为)。因此,当我尝试调用 Sub(子项目)的 class 时,我总是会收到 No bean found 错误。发生这种情况是因为 -Dloader.path 未能将子项目中的 JARS 包含到 class 路径中。在升级之前,我可以在 class 路径上看到相关的 jar。
我尝试了几种方法来更改清单中的 Main-Class
属性以使用 PropertiesLaucher,但 none 似乎有效。我还查看了插件文档并尝试了类似的方法但是没有用
https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/gradle-plugin/reference/html/#packaging-executable-configuring-properties-launcher
我认为通过更改 Main-class 我可以解决这个问题,但我不确定该怎么做。
任何建议或想法都会有所帮助。欢迎所有评论。如果有需要,我会更新问题。
由于公司政策原因,我无法放置更大的代码片段,因此提前致歉。
我可以通过添加以下属性来解决这个问题
bootJar {
manifest {
attributes(
'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher',
'Spring-Boot-Classes': 'BOOT-INF/classes/',
'Spring-Boot-Lib': 'BOOT-INF/lib/'
)
}
}
只有这个在清单中应该也能正常工作:
'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
我正在将 springboot 应用程序从 1.X 升级到 2.1.3.RELEASE。我的 Springboot 是一个多模块项目设置,它使用类似于此的 java 命令触发。
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
项目结构是这样的
- 应用程序
- 普通
- 核心(有主要class)
- 亚
升级前:core.jar 的 Manifest.mf 文件如下所示
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 文件的样子
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
加载所有子(子项目)jar到class路径
springBoot{
mainClass = "com.demo.Main"
layout = "ZIP"
}
升级后,layout
属性 现已在 2.1 中弃用。3.RELEASE 并且 Main-Class
现在更改为 Main-Class: org.springframework.boot.loader.JarLauncher
,这不会' 支持 -Dloader.path
的用法(我认为)。因此,当我尝试调用 Sub(子项目)的 class 时,我总是会收到 No bean found 错误。发生这种情况是因为 -Dloader.path 未能将子项目中的 JARS 包含到 class 路径中。在升级之前,我可以在 class 路径上看到相关的 jar。
我尝试了几种方法来更改清单中的 Main-Class
属性以使用 PropertiesLaucher,但 none 似乎有效。我还查看了插件文档并尝试了类似的方法但是没有用
https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/gradle-plugin/reference/html/#packaging-executable-configuring-properties-launcher
我认为通过更改 Main-class 我可以解决这个问题,但我不确定该怎么做。
任何建议或想法都会有所帮助。欢迎所有评论。如果有需要,我会更新问题。
由于公司政策原因,我无法放置更大的代码片段,因此提前致歉。
我可以通过添加以下属性来解决这个问题
bootJar {
manifest {
attributes(
'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher',
'Spring-Boot-Classes': 'BOOT-INF/classes/',
'Spring-Boot-Lib': 'BOOT-INF/lib/'
)
}
}
只有这个在清单中应该也能正常工作:
'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'