Java Jar由Gradle多模块项目构建,带有Spring Boot';行不通
我创建了SpringBootGradle多模块项目,该项目由3个模块组成:控制器、服务、存储库。主文件位于控制器模块中,名为myspringbootplication 我可以构建这个项目(使用GradleBuild)并获得jar文件。但是在命令行中启动这个jar之后,我遇到了下一个错误:Java Jar由Gradle多模块项目构建,带有Spring Boot';行不通,java,spring-boot,gradle,multi-module,Java,Spring Boot,Gradle,Multi Module,我创建了SpringBootGradle多模块项目,该项目由3个模块组成:控制器、服务、存储库。主文件位于控制器模块中,名为myspringbootplication 我可以构建这个项目(使用GradleBuild)并获得jar文件。但是在命令行中启动这个jar之后,我遇到了下一个错误: Error: Could not find or load main class com.epam.esm.config.MySpringBootApplication Caused by: java.lang
Error: Could not find or load main class com.epam.esm.config.MySpringBootApplication Caused by: java.lang.ClassNotFoundException: com.epam.esm.config.MySpringBootApplication.
为了修复这个bug,我在Mainbuild.gradle
中的MANIFEST.MF文件中添加了Main Class
attribute,但是这个操作没有帮助。有人能帮忙吗
主BUILD.GRADLE文件
plugins {
id 'java'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'org.springframework.boot' version '2.4.3'
id 'application'
}
group = 'com.myproject'
version = 'snapshot-1.0.0'
repositories {
mavenCentral()
}
bootJar {
enabled = false
}
jar {
enabled = true
manifest {
attributes(
"Main-Class": "com.myproject.config.MySpringBootApplication")
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.4.3', ext: 'pom'
}
test {
useJUnitPlatform()
}
subprojects {
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
group = 'com.epam.esm'
version = '1.0.0'
repositories {
mavenCentral()
}
bootJar {
enabled = false
}
jar {
enabled = true
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation group: 'org.hibernate', name: 'hibernate-envers', version: '5.4.27.Final'
implementation group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
implementation group: 'org.openidentityplatform.commons', name: 'json-web-token', version: '2.0.11'
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.18'
annotationProcessor 'org.projectlombok:lombok'
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.4.3', ext: 'pom'
}
test {
useJUnitPlatform()
}
}
格雷德尔酒店
rootProject.name = 'module'
include('repository', 'service', 'controller')
Spring Boot应用程序可执行jar文件是由bootJar
task构建的,因此通过jar
添加主类信息也不起作用
bootJar
任务试图创建一个可执行的jar,并且
需要main()方法。因此,您需要禁用
bootJar
task并启用jar任务(创建普通jar
而不是一个可执行的jar)仅用于您的无可执行jar
模块
由于您是在subjects{}
部分controller
下完成的,所以模块也将生成一个标准jar。您可以为不包括controller
的其他模块生成标准jar文件,如下所示:
subprojects {
if (it.name != 'controller') {
bootJar {
enabled = false
}
jar {
enabled = true
}
}
}
此外,您还必须删除
jar {
enabled = true
manifest {
attributes(
"Main-Class": "com.myproject.config.MySpringBootApplication")
}
}
替换
bootJar {
enabled = false
}
与
参考文献
你的应用程序模块应该有
bootJar{enabled=true}
这对你很好没有帮助!!!!我好几天都找不到答案,但你们在发表问题后半小时内给出了答案。谢谢你。欢迎你,快乐编码!!!
bootJar {
mainClassName = 'com.myproject.config.MySpringBootApplication'
}