如何创建自定义Maven依赖?打包测试类成依赖遇主类缺失报错怎么办?
关于Maven依赖创建与构建报错的解决方案
一、怎么创建自己的Maven依赖?
- 新建普通Maven项目(别选Spring Boot初始化项目,除非你真需要Spring Boot特性)
- 编写要打包的类、注解等代码;如果要打包测试目录(
src/test/java)的内容,后续要额外配置Maven插件 - 在
pom.xml里填写核心坐标:groupId(你的项目组标识)、artifactId(项目唯一标识)、version(版本号) - 执行
mvn clean install,Jar包会被安装到本地Maven仓库,其他项目直接通过坐标就能引入这个依赖
二、依赖Jar包必须有主类吗?
完全不需要。只有当你要打包可执行Jar(比如Spring Boot的启动Jar)时,才需要指定主类。普通的依赖Jar只负责提供类、注解供其他项目调用,有没有主类根本不影响。
三、解决构建失败的报错
这个报错是因为用了spring-boot-maven-plugin的repackage目标——这个插件是用来打包Spring Boot可执行Jar的,默认会强制寻找主类。而你的场景是做普通依赖Jar,完全不需要这个功能,两种解决方法:
方法1:直接移除Spring Boot Maven插件(推荐)
如果你的项目只是普通依赖库,删掉pom.xml里的spring-boot-maven-plugin配置就行:
<!-- 删除这段配置 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.8</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
方法2:保留插件但禁用repackage或指定主类(不推荐)
如果必须保留插件,要么禁用repackage目标,要么随便指定一个存在的类当主类(空类也行):
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.8</version> <executions> <execution> <id>repackage</id> <phase>none</phase> <!-- 禁用repackage目标 --> </execution> </executions> </plugin>
或者指定主类:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.8</version> <configuration> <mainClass>com.example.YourClass</mainClass> <!-- 填一个项目里存在的类路径 --> </configuration> </plugin>
四、打包测试目录下的代码到Jar
要是你需要把src/test/java下的注解和类打包进Jar,得在pom.xml里配置maven-jar-plugin,让它打包测试代码:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <goals> <goal>test-jar</goal> <!-- 生成带-tests后缀的测试Jar --> </goals> </execution> </executions> </plugin>
执行mvn clean install后,会生成两个Jar:普通主Jar和带-tests后缀的测试Jar。其他项目引入时,要加上classifier:
<dependency> <groupId>你的groupId</groupId> <artifactId>你的artifactId</artifactId> <version>你的version</version> <classifier>tests</classifier> </dependency>
内容的提问来源于stack exchange,提问作者Dhanyaa Bharadwaj
相关产品推荐
相关产品推荐

