1

Я пытаюсь настроить cronjob для загрузки моих ежедневных и еженедельных отчетов из iTunes Connect. Я скачал Apple Autoingestion.class и сделал следующий скрипт для загрузки еженедельных отчетов:

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

Этот сценарий оболочки хранится в том же каталоге, что и Autoingestion.class . Когда я запускаю этот сценарий оболочки внутри каталога, он работает нормально. Если я иду в другой каталог и запускаю его, я получаю следующую ошибку:

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 не работает.

У кого-нибудь есть идея, почему это происходит и нужно ли что-то делать, чтобы от нее избавиться?

2 ответа2

3

Используйте следующий скрипт:

#!/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. Я просто не расстегнул молнию на классе перед тем, как запустить его. Doh!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .