动态加载springboot编译后的jar文件,由于采用springboot的maven插件进行编译打包,打包成功后springboot回自动在jar里面添加BOOT-INFO等boot为前缀的文件路径,导致采用classloader的方式动态加载失败。
1、尝试过将springboot打包成普通jar包,但是无法正常运行jar文件。
2、尝试过在classloader的时候将springboot自动加上的文件BOOT-INFO等文件去掉,但是还是报类无法找到的异常。
这个问题 可以尝试使用 maven 插件 org.apache.maven.plugins 从新打个包试试
也许可以帮到你。
<build>
<resources>
<resource>
<!--指定mapping下的所有xml文件打包在jar中-->
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>mapping/*.xml</include>
</includes>
</resource>
<resource>
<!--resources下一级的所有.xml .properties文件复制到config目录下-->
<targetPath>${project.build.directory}/config</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**.xml</include>
<include>**.yml</include>
<include>**.yaml</include>
<include>**.properties</include>
</includes>
</resource>
</resources>
<plugins>
<!--maven-dependency插件,将项目所有依赖包放到lib目录下-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<!--生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<!-- 修改你的包名 -->
<mainClass>com.xxxxx.Application</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<!--jar中的MANIFEST.MF文件ClassPath需要添加config目录才能读取到配置文件-->
<Class-Path>config/ .</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
这是把依赖包,打包到/lib
目录是吧?然后就可以动态的在这里目录中更换编译后的依赖。
是否可以尝试自定义一个类加载器,去加载你加入的jar包