如何解决Spring Boot项目中MATLAB classpath.txt不再支持的警告?
我搭建了一个Spring Boot Java项目,使用MATLAB 9.4.0.949201 (R2018a) Update 6(对应Java版本1.8.0_144-b01)。之前因为遇到"MATLAB Java Package版本与MCR版本不兼容"的错误,把MATLAB从R2023a降级到R2018a,解决了部分问题,但现在出现如下警告:
Warning: classpath.txt in the startup directory no longer supported. See The Static Path
以下是项目的pom.xml内容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> </parent> <groupId>com.example</groupId> <artifactId>demo1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> <start-class>peridynamics.demoApp</start-class> <cholSolver.path>C:\Users\user\Desktop\PDTO\pdtopolys\cholSolver.jar</cholSolver.path> <javabuilder.path>C:\Program Files\MATLAB\R2018a\toolbox\javabuilder\jar\javabuilder.jar</javabuilder.path> </properties> <dependencies> <dependency> <groupId>com.googlecode.matrix-toolkits-java</groupId> <artifactId>mtj</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.7.0</version> <scope>test</scope> </dependency> <!-- Replace hard-coded paths with variables --> <dependency> <groupId>peridynamics</groupId> <artifactId>cholSolver</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${cholSolver.path}</systemPath> </dependency> <dependency> <groupId>com.mathworks</groupId> <artifactId>javabuilder</artifactId> <version>R2018a</version> <scope>system</scope> <systemPath>${javabuilder.path}</systemPath> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>peridynamics.demoApp</mainClass> <layout>JAR</layout> </configuration> </plugin> </plugins> </build> </project>
添加Spring Boot Maven插件之前,JAR能正常构建,之后就出现这个警告。想问怎么解决?要不要修改Spring Boot或Maven版本?
我的Maven版本信息如下:
Apache Maven 3.9.4 (dfbb324ad4a7c8fb0bf182e6d91b0ae20e3d2dd9) Maven home: C:\Program Files\apache-maven-3.9.4 Java version: 11.0.19, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-11 Default locale: en_US, platform encoding: Cp1252 OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
1. 先搞懂警告的本质
这个警告是MATLAB的提示:启动目录下的classpath.txt配置方式已经被废弃。MATLAB从R2017b开始就不再支持通过这个文件配置静态类路径,转而推荐用javaclasspath/javaaddpath命令动态添加,或者通过MATLAB预设界面配置类路径。
2. 排查Spring Boot集成后的触发原因
添加Spring Boot Maven插件后出现警告,大概率是插件打包时把MATLAB相关的classpath.txt文件包含到了JAR根目录或项目运行的工作目录,触发了MATLAB的废弃提示。
具体修复步骤:
- 删除项目中的
classpath.txt:检查项目的src/main/resources或根目录,如果存在这个文件直接删除;如果是MATLAB自动生成的,确保它不会被Maven打包到最终JAR里。 - 配置Maven排除该文件:在Spring Boot Maven插件中添加排除规则,避免
classpath.txt被打包:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>peridynamics.demoApp</mainClass> <layout>JAR</layout> <excludes> <exclude> <groupId>*</groupId> <artifactId>*</artifactId> <includes> <include>classpath.txt</include> </includes> </exclude> </excludes> </configuration> </plugin>
- 改用MATLAB推荐的类路径配置方式:不要依赖
classpath.txt,在代码里通过javabuilderAPI动态指定类路径,或者在MATLAB中提前配置好。
3. 修复版本兼容性问题
Java版本冲突
MATLAB R2018a基于Java 8编译,但你的项目配置的java.version是11,虽然Spring Boot 2.1.x支持Java 11,但javabuilder.jar和高版本Java可能存在兼容性问题。建议把项目Java版本改成1.8:
<properties> <java.version>1.8</java.version> <!-- 其他属性保持不变 --> </properties>
Spring Boot版本不统一
当前项目父依赖是2.1.8.RELEASE,但web和test依赖手动指定了2.7.0,版本不统一会导致依赖冲突。二选一修复:
- 统一用父版本:去掉web、test依赖的手动
version配置,继承父依赖的2.1.8.RELEASE; - 升级父依赖到2.7.0:2.7.x支持Java 8-17,和MATLAB的Java 8兼容:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.0</version> </parent>
Maven版本
Maven 3.9.4和Spring Boot 2.1.x/2.7.x都兼容,不需要修改Maven版本。
4. 验证修复
修改后执行mvn clean package构建JAR,运行时检查警告是否消失。如果还有警告,继续排查是否有其他位置的classpath.txt被加载。
内容的提问来源于stack exchange,提问作者RYldz

