Java CLASSPATH 引发的问题

# 问题

 

在做 OJ 的时候,由于程序需要编译运行,出于安全性考虑,我选择利用类 ProcessBuilder ,一个通过命令行调用 Java 程序的类。

我在 Eclipse 中或者在 CMD 中执行利用类 ProcessBuilder 运行的程序都没有问题,然后利用 Tomcat 开启服务器厚,调用该程序一直报错。

提示:找不到或无法加载主类 Main。

 

# 排查

 

一般来说先排查输入参数有没有问题,显然能在 CMD 中可以执行的程序,参数不会有问题。

是不是包名的问题?也不是。在 CMD 中调用 OJ 保存下来的程序,是可以运行的。

这就很诡异了。其实那句报错提示很玄乎,因为它包括了两个方面:找不到主类Main,无法加载主类Main

 

# 核心

 

什么情况下会无法加载主类 Main?CLASSPATH 不正确的情况是一种

Tomcat 运行的时候,会自定义 CLASSPATH, 覆盖环境变量的 CLASSPATH。如下图,这是我修改之后的 CLASSPATH,原来的 CLASSPATH 可没有这么多。

 

# 解决

 

在 %TOMCAT_HOME%/bin/setenv.bat 中定义 CLASSPATH 即可。

例如:

SET JAVA_OPTS=-Duser.language=en
SET CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%APACHE_TOMCAT_HOME%\lib\servlet-api.jar;%APACHE_TOMCAT_HOME%\lib\tomcat-api.jar;C:\apache-tomcat8.5.9\webapps\onlineJudge\WEB-INF\classes\

 

转载于:https://www.cnblogs.com/Piers/p/6557086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值