目录
一、错误来源
二、原始pom文件
common模块
pojo模块
server模块
父工程
三、解决方法
四、修改pom文件
common模块
pojo模块
server模块(不改动)
父工程
使用Maven对项目进行多模块开发,在项目打包时出现错误:Unable to find main class
具体如下:
这是一个单体架构的项目,用到了Maven多模块设计。分为common公共模块,提供工具类、常量类、响应结果类、枚举类、异常类等;pojo实体模块,提供各种封装对象,例如数据传输对象DTO、数据库表实体类对象Entity、值对象VO;server服务模块,是服务的主体模块,包含配置类、切面类、controller、service、mapper、启动类等。
在对父工程使用Maven命令进行打包时,common模块出现找不到主类的错误。因为common模块和pojo模块都是为server服务模块提供支持,所以肯定是没有主类的。
4.0.0
com.hange_summer
report_system
0.0.1-SNAPSHOT
common
0.0.1-SNAPSHOT
common
common
17
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-maven-plugin
4.0.0
com.hange_summer
report_system
0.0.1-SNAPSHOT
pojo
0.0.1-SNAPSHOT
pojo
pojo
17
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-maven-plugin
4.0.0
com.hange_summer
report_system
0.0.1-SNAPSHOT
server
0.0.1-SNAPSHOT
server
server
17
org.springframework.boot
spring-boot-starter
com.hange_summer
common
0.0.1-SNAPSHOT
com.hange_summer
pojo
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-maven-plugin
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.2.1
com.hange_summer
report_system
0.0.1-SNAPSHOT
pom
common
pojo
server
report_system
report_system
17
8.2.0
3.0.3
0.9.1
2.3.1
1.1.1
2.3.3
4.1.0
4.1.2
4.1.2
1.24.0
3.15.1
1.2.83
4.5.13
1.5.4
2.7.3
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.version}
com.mysql
mysql-connector-j
${mysql.version}
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.mybatis.spring.boot
mybatis-spring-boot-starter-test
3.0.3
test
org.springframework.security
spring-security-test
test
io.jsonwebtoken
jjwt
${jjwt.version}
org.springframework.boot
spring-boot-configuration-processor
true
javax.xml.bind
jaxb-api
${jaxb-api.version}
javax.activation
activation
${activation.version}
org.glassfish.jaxb
jaxb-runtime
${jaxb-runtime.version}
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
${knife4j.version}
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-data-redis
org.apache.poi
poi
${poi.version}
org.apache.poi
poi-ooxml
${poi-ooxml.version}
org.apache.commons
commons-compress
${commons-compress.version}
com.aliyun.oss
aliyun-sdk-oss
${aliyun.version}
com.alibaba
fastjson
${fastjson.version}
org.apache.httpcomponents
httpclient
${httpclient.version}
org.codehaus.jettison
jettison
${jettison.version}
org.springframework.boot
spring-boot-starter-websocket
org.springframework.boot
spring-boot-starter-cache
${cache.version}
org.springframework.boot
spring-boot-maven-plugin
org.project-lombok
lombok
将pom.xml文件中的Maven打包插件注释掉,只有存在启动类的模块(server模块)保留,注意父工程中的Maven打包插件也要注释掉。
Maven打包插件:
org.springframework.boot
spring-boot-maven-plugin
因为是单体架构的项目,所以启动类有且只有一个,其他模块有启动类或者是测试类都是没有意义的。
在父工程中使用生命周期package进行打包,这时就不会出现上面的错误了。需要注意的是打包过程中会对测试类中的方法进行测试,可能会出错。
例如我在测试类中写了一个测试Redis数据库的方法,但是打包过程中我的Redis服务并没有启动,所以打包失败了。
解决方法是直接跳过测试的过程:
切换到”跳过测试“模式,再进行打包就不会受测试类的影响了。
打包完成后,在server模块的target目录下可以找到对应的jar包。鼠标右键jar包,点击运行,也是能成功运行的。
4.0.0
com.hange_summer
report_system
0.0.1-SNAPSHOT
common
0.0.1-SNAPSHOT
common
common
17
org.springframework.boot
spring-boot-starter
4.0.0
com.hange_summer
report_system
0.0.1-SNAPSHOT
pojo
0.0.1-SNAPSHOT
pojo
pojo
17
org.springframework.boot
spring-boot-starter
4.0.0
com.hange_summer
report_system
0.0.1-SNAPSHOT
server
0.0.1-SNAPSHOT
server
server
17
org.springframework.boot
spring-boot-starter
com.hange_summer
common
0.0.1-SNAPSHOT
com.hange_summer
pojo
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-maven-plugin
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.2.1
com.hange_summer
report_system
0.0.1-SNAPSHOT
pom
common
pojo
server
report_system
report_system
17
8.2.0
3.0.3
0.9.1
2.3.1
1.1.1
2.3.3
4.1.0
4.1.2
4.1.2
1.24.0
3.15.1
1.2.83
4.5.13
1.5.4
2.7.3
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.version}
com.mysql
mysql-connector-j
${mysql.version}
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.mybatis.spring.boot
mybatis-spring-boot-starter-test
3.0.3
test
org.springframework.security
spring-security-test
test
io.jsonwebtoken
jjwt
${jjwt.version}
org.springframework.boot
spring-boot-configuration-processor
true
javax.xml.bind
jaxb-api
${jaxb-api.version}
javax.activation
activation
${activation.version}
org.glassfish.jaxb
jaxb-runtime
${jaxb-runtime.version}
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
${knife4j.version}
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-data-redis
org.apache.poi
poi
${poi.version}
org.apache.poi
poi-ooxml
${poi-ooxml.version}
org.apache.commons
commons-compress
${commons-compress.version}
com.aliyun.oss
aliyun-sdk-oss
${aliyun.version}
com.alibaba
fastjson
${fastjson.version}
org.apache.httpcomponents
httpclient
${httpclient.version}
org.codehaus.jettison
jettison
${jettison.version}
org.springframework.boot
spring-boot-starter-websocket
org.springframework.boot
spring-boot-starter-cache
${cache.version}