使用 Apple 自动提取工具时未找到 JAVA 主类

使用 Apple 自动提取工具时未找到 JAVA 主类

我正在尝试设置一个 cronjob 来从 iTunes Connect 下载我的每日和每周报告。我已经下载了 Apple 的Autoingestion.class,并编写了以下 shell 脚本来下载每周报告:

java Autoingestion <MyAccountName> <MyPassword> <MyVendorID> Sales Weekly Summary

此 shell 脚本与 存储在同一个目录中Autoingestion.class。当我在目录中运行此 shell 脚本时,它运行正常。如果我转到另一个目录并运行它,则会收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Autoingestion
Caused by: java.lang.ClassNotFoundException: Autoingestion
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: Autoingestion. Program will exit.

因为从另一个目录运行时不起作用,所以我的 cronjob 不起作用。

有人知道为什么会发生这种情况以及有什么办法可以消除它吗?

答案1

使用以下脚本:

#!/usr/bin/env bash
cd "$( dirname "$0" )"
java Autoingestion <MyAccountName> <MyPassword> <MyVendorID> Sales Weekly Summary

这会将工作目录更改为脚本的位置,然后执行 Java 程序。

原因可能是隐含的类路径.。来自man java

   -cp classpath
          Specifies a list of directories, JAR archives, and ZIP  archives
          to  search for class files.  Class path entries are separated by
          colons (:). Specifying -classpath or -cp overrides  any  setting
          of the CLASSPATH environment variable.

          If -classpath and -cp are not used and CLASSPATH is not set, the
          user class path consists of the current directory (.).

由于在您当前工作目录中java找不到(Autoingestion如果您从其他地方调用该脚本),因此它无法启动。

根据程序的具体行为(例如在当前工作目录中写入文件),您还可以尝试指定适当的-classpath,例如:

java -cp "$( dirname "$0" )" Autoingestion <MyAccountName> <MyPassword> <MyVendorID> Sales Weekly Summary

答案2

我刚刚遇到了这个错误,原因是我有点愚蠢 - Apple 提供了 Autoingestion.class.zip。我只是在运行该类之前没有解压该类。哎呀!

相关内容