【问题标题】:Error running Java cron from command line with Spring使用 Spring 从命令行运行 Java cron 时出错
【发布时间】:2015-09-23 14:24:26
【问题描述】:

当从 Eclipse 作为独立应用程序运行时,这一切都有效。

我的 Java 主方法:

public static void main(String[] args) throws MessagingException, IOException, RequestErrorFault, UnexpectedErrorFault, ServerErrorFault {
        ApplicationContext context = new FileSystemXmlApplicationContext("src" + File.separator + "main" + File.separator + "webapp" + File.separator + "WEB-INF" + File.separator + "spring" + File.separator + "appServlet" + File.separator + "cron-context.xml");

        CheckStatus checkStatus = context.getBean(CheckStatus.class);


        List<Integer> requestIds = checkStatus.getRequests(); 
        checkStatus.processRequests(requestIds);
    }

输出:

java -cp /html/myProj/API/target/classes:/html/myProj/API/target/API-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib  com.api.spring.management.CheckStatus
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

我已经传入了所有 spring jar 所在的类路径上的 lib 文件夹。我也尝试过通过 mvnexec:java 运行它,但似乎都不起作用。

【问题讨论】:

  • 试试java -cp "/html/myProj/API/target/classes:/html/myProj/API/target/API-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/*" com.api.spring.management.CheckStatus。 (注意末尾的/*
  • 这确实有帮助,但现在我收到此错误“线程“主”java.lang.NoClassDefFoundError: javax/servlet/ServletContext 中的异常”
  • 这是另一个错误,意味着您缺少servlet-api jar。
  • 我建议使用 maven 构建和打包您的应用程序并使用一些插件(例如 maven.apache.org/plugins/maven-shade-plugin)来构建一个胖 jar 并避免所有这些类路径问题。
  • 但是我仍然需要在其中调用各个 java 应用程序文件,因为我有多个 crons

标签: java eclipse spring cron


【解决方案1】:

除此之外:

试试 java -cp “/html/myProj/API/target/classes:/html/myProj/API/target/API-1.0.0-BUILD-SNAPSHO‌​T/WEB-INF/lib/” com.api.spring.management.CheckStatus。 (注意末尾的 /)—— 图纳基

事实证明,我的一个依赖项没有设置为在战争中导出,所以在我修复它之后一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多