Java CLASSPATH 引发的问题
2024-08-31 23:48:07
# 问题
在做 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\
最新文章
- Vagrant使用简介
- JDBC成绩管理系统
- 苹果API常用英语名词
- Andriod 按钮代码
- maven本地仓库的配置以及如何修改默认.m2仓库位置
- Team Queue
- [GDUT 决赛]--GCD,LCM——我是好人(数论)
- SIP基本呼叫
- JavaScript对象原型写法区别
- 【转载】makefile经典教程
- django rest-framework 4.REST的认证和权限
- Java进阶(二十四)Java List集合add与set方法原理简介
- LeetCode(67):二进制求和
- SQL assistant
- ajax之同步异步详解
- 专题--XOR之线性基
- C# __arglist 关键字
- Java类是如何默认继承Object的?
- position定位属性
- #C++初学记录 (第一次测试)(A - 复习时间 )
热门文章
- JNI:no implementation found in native...
- PHP移动互联网开发笔记(1)——环境搭建及配置
- js如何实现动态显示表格数据(点奇数显示奇数单元格内容)
- UiwebView and html
- 《Erlang程序设计》学习笔记-第2章 并发编程
- Android中再按一次退出实现
- #781 – 多个变换执行的顺序问题(Transform Order Matters)
- 学习web开发遇到几个细节问题
- 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍
- 数据结构 Tricks(一)—— 父节点和左右孩子索引号之间的关系