Classe principale JAVA introuvable lors de l'utilisation de l'outil d'enregistrement automatique Apple

1

J'essaie de configurer une tâche cron pour télécharger mes rapports quotidiens et hebdomadaires à partir d'iTunes Connect. J'ai téléchargé Apple Autoingestion.classet j'ai créé le script suivant pour télécharger les rapports hebdomadaires:

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

Ce script shell est stocké dans le même répertoire que le Autoingestion.class. Lorsque j'exécute ce script shell dans le répertoire, cela fonctionne bien. Si je vais dans un autre répertoire et l'exécute, j'obtiens le message d'erreur suivant:

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.

Parce que cela ne fonctionne pas lorsqu'il est exécuté depuis un autre répertoire, mon travail cronjob ne fonctionne pas.

Quelqu'un a-t-il une idée de la raison pour laquelle cela se produit et s'il y a quelque chose à faire pour s'en débarrasser?

SimonBS
la source
Avez-vous essayé de spécifier le classpathavec -cp /path/to/your/stuff?
Slhck

Réponses:

3

Utilisez le script suivant:

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

Cela modifiera le répertoire de travail à l'emplacement du script, puis exécutera le programme Java.

La raison en est probablement le chemin de classe implicite .. De 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 (.).

Comme vous javane trouvez pas Autoingestiondans votre répertoire de travail actuel si vous appelez le script ailleurs, il ne parvient pas à se lancer.

En fonction du comportement exact du programme (par exemple, l'écriture de fichiers dans le répertoire de travail en cours), vous pouvez également essayer de spécifier un correct -classpath, par exemple:

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

Daniel Beck
la source
Je ne suis pas sûr à 100% que le -cpparamètre fonctionne exactement comme ceci. Cela peut dépendre d'autres bibliothèques dont vous avez également besoin.
Daniel Beck
Merci beaucoup! Cela a résolu le problème. Merci également pour l'explication. Cela a du sens :-) J'ai choisi d'ajouter cd "$( dirname "$0" )"au script shell et ça a marché.
SimonBS
2

Je viens d'avoir cette erreur, et la raison en était que j'étais un peu stupide - Apple fournit Autoingestion.class.zip. Je n'avais tout simplement pas décompressé le cours avant de le lancer. Doh!

James Minter
la source