springboot项目的spring-boot-maven-plugin打包工具 <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins>
executions的repackage部分可以不需要,打包后效果一样。skip为true打包后结果如下(整个插件都不配置也是一样的效果):
去掉skip部分打包后如下:多了boot的东西,自己的代码则放在BOOT-INF里面了
我新建的一个springboot项目只是增加了spring.factories和一个配置类,之前用的别人的springboot工程没问题,自己添加的却死活加载不了。将springboot读取的部分代码拷贝出来执行
就是获取不到对应自己jar文件,只有spring自己的
file:/E:/repo/org/springframework/boot/spring-boot/2.2.5.RELEASE/spring-boot-2.2.5.RELEASE.jar!/META-INF/spring.factories
file:/E:/repo/org/springframework/boot/spring-boot-autoconfigure/2.2.5.RELEASE/spring-boot-autoconfigure-2.2.5.RELEASE.jar!/META-INF/spring.factories
file:/E:/repo/org/springframework/spring-beans/5.2.4.RELEASE/spring-beans-5.2.4.RELEASE.jar!/META-INF/spring.factories
在第一个截图中发现有两个META-INF,而之前别人的工程打包之后只有一个。调整了springboot的版本,依赖包始终没有解决。spring.factories只是在一个META-INF中,就是导致找不到我们自己打的jar包。
手动到install之后jar包删除多余的一个META-INF测试依然没解决。
手动复制META-INF然后Refactor-》Rename 把这个名字又覆盖了一下,发现之前是目录的小图标变了树型图标
,再次打包install之后
两个目录都有spring.factories文件,再次执行代码找到了我们的jar
file:/E:/repo/io/renren/dynamicdatasource/0.0.1-SNAPSHOT/dynamicdatasource-0.0.1-SNAPSHOT.jar!/META-INF/spring.factories
之前是自己手动创建的META-INF目录,不知道为啥会导致这样的问。