• 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%libdt.jar;%JAVA_HOME%lib	ools.jar;%APACHE_TOMCAT_HOME%libservlet-api.jar;%APACHE_TOMCAT_HOME%lib	omcat-api.jar;C:apache-tomcat8.5.9webappsonlineJudgeWEB-INFclasses
  • 相关阅读:
    Redis 分布式锁
    Angular VS Blzaor
    Chorme 跨域的快捷解决
    旋转3角形
    .Netcore AD 操作
    .Netcore 2.2 和3.1 的模板
    Command3
    CSS Selector
    弹性盒子
    Label_strange_labels
  • 原文地址:https://www.cnblogs.com/Piers/p/6557086.html
Copyright © 2020-2023  润新知