1. Unable to find main class
创建spring boot项目写自己的starterxi写完之后使用install
出现Unable to find main class
,这是因为spring boot打包需要一个启动类,按照以下写法就没事
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>NONE</layout>
<skip>true</skip> <!-- 自己打出的包也能用 ,就是打出的包不包含BOOT-INF目录 -->
</configuration>
</plugin>
</plugins>
<layout>NONE</layout>
解决启动类问题,<skip>true</skip>
解决打出jar包不包含BOOT-INF目录 ,否则依赖stater总是报某某包未找到
非正常
正常
2. 版本问题
在引入自己的starter之后,一直无法自动注入写的Bean并且代码没问题。此时需要注意你的spring boot版本。3.0.x版本之后自动装配的文件命名不再是spring.factories
而是org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件命名必须要按照这个名字。具体原因可以参考spring boot自动转配原理,如下
AutoConfigurationImportSelector类主要就是扫描自动装配文件并注册相关的类,这个类的getCandidateConfigurations方法: configurations
这个集合里面就是所有应该自动装配的类的路径,根据提示可知自动装配的文件应该写在META-INF/spring/
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader())
.getCandidates();
Assert.notEmpty(configurations,
"No auto configuration classes found in "
+ "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you "
+ "are using a custom packaging, make sure that file is correct.");
return configurations;
}
还有一点需要注意就是starter的版本必须要跟需要使用的工程项目spring boot一致否则报错