【发布时间】:2020-01-07 18:31:23
【问题描述】:
我有一个运行良好的 Spring 5 应用程序。顺便说一句,它是 Spring 5 CLASSIC,不使用 Spring Boot。因此,它没有使用嵌入式 Tomcat。我构建了一个传统的 WAR 文件,并将其部署到现有的 Tomcat 安装中。
这个项目是一个多 maven 模块项目,由几个 jar 组成,并以一个 WAR 文件结尾。这运行得很好。我想要做的是在其中一个 jar 中执行一个类作为独立的代码,它是一个我想每晚运行的实用程序。我知道它在 Eclipse 中运行得很好,所以我知道代码没问题。
根据这里的读数,很明显必须做什么。
java -cp SomeJava.jar com.tomholmes.products.myproject.server.util.MyClassUtil
是的,这个 'MyClassUtil' 确实有一个“main”方法,正如你所期望的那样。
public static void main(String[] args) throws Exception {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
MyClassUtil myClassUtil = new MyClassUtil();
myClassUtil.processBackLog();
}
我已经部署了一个WAR文件(MyProject.war)部署在我的linux机器上,tomcat位于:/opt/tomcat,war文件部署到:/opt/tomcat/webapps 当我们重新启动tomcat时,我们有:
/opt/tomcat/webapps/MyProject
/opt/tomcat/webapps/MyProject/META-INF
/opt/tomcat/webapps/MyProject/WEB-INF
/opt/tomcat/webapps/MyProject/WEB-INF/classes <--- no files at all
/opt/tomcat/webapps/MyProject/WEB-INF/libs <--- contains all JAR files including
the one that has my class in it
/opt/tomcat/webapps/MyProject/WEB-INF/libs/my-utils.jar <--- contains the class I want to
execute
我有一个看起来像这样的脚本文件“my_util.sh”。
export JAVA_ROOT=/opt/java
export JAVA_HOME=/opt/java
export JAVA_BINDIR=/opt/java/bin
export JRE_HOME=/opt/java/jre
export JRE_BINDIR=/opt/java/jre/bin
export PATH=${JAVA_HOME}:${JAVA_BINDIR}:$PATH
export PATH=${JRE_HOME}:${JRE_BINDIR}:$PATH
export PATH=${JAVA_HOME}:${JAVA_BINDIR}:$PATH
datestr=$(date +%Y%m%d_%H%M%S)
export CLASSPATH=/opt/tomcat/webapps/MyProject/WEB-INF/libs/my-utils.jar
export MAINCLASS=com.tomholmes.products.myproject.server.util.MyClassUtil
java -cp ${CLASSPATH} ${MAINCLASS}
我得到了回应:
Error: Could not find or load main class com.tomholmes.products.myproject.server.util.MyClassUtil
根据这里过去的消息,其中有很多,我做了研究,我现在应该已经解决了这个问题。我设置一切的方式应该可以正常工作,但事实并非如此。我确信我错过了一些小东西,我觉得我快到了。如果有人可以提出建议或帮助我解决这个问题,那就太好了。我会继续自己寻找答案,看看能不能在这个问题得到解答之前得到答案。
谢谢!
【问题讨论】:
-
不要混合使用独立应用程序和 Web 应用程序
-
检查类是否在jar文件中(注意大小写)并在运行脚本时判断jar是否在路径中
-
在涉及脚本之前,您是否尝试过从命令行运行它?
-
你确定
${CLASSPATH}包含你想要的,因为我知道linux 变量就是这样使用的$CLASSPATH -
如果你的类使用了其他 jar 中的一些其他类,那么你需要将所有这些额外的 jar 添加到你的类路径中
标签: java linux command-line