A classe principal JAVA não foi encontrada ao usar a ferramenta de inserção automática da Apple

1

Estou tentando configurar um cronjob para baixar meus relatórios diários e semanais do iTunes Connect. Eu fiz o download do Autoingestion.class da Apple e fiz o seguinte script de shell para fazer o download dos relatórios semanais:

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

Este script de shell é armazenado no mesmo diretório que o Autoingestion.class . Quando eu executo este script de shell dentro do diretório, ele funciona bem. Se eu for para outro diretório e executá-lo, estou recebendo o seguinte erro:

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.

Como não funciona quando está sendo executado em outro diretório, meu cronjob não funciona.

Alguém tem uma idéia de por que isso acontece e se há alguma coisa a fazer para se livrar dele?

    
por SimonBS 22.10.2011 / 13:01

2 respostas

3

Use o seguinte script:

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

Isso alterará o diretório de trabalho para o local do script e executará o programa Java.

O motivo é provavelmente o caminho implícito da classe . . 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 (.).

Como java não encontra Autoingestion em seu diretório de trabalho atual se você chamar o script de algum outro lugar, ele não será iniciado.

Dependendo do comportamento exato do programa (por exemplo, gravar arquivos no diretório de trabalho atual), você também pode tentar especificar um -classpath adequado, por exemplo:

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

    
por 22.10.2011 / 13:20
2

Eu acabei de receber este erro, e a razão é que eu estava sendo um pouco estúpido - a Apple fornece o Autoingestion.class.zip. Eu simplesmente não tinha aberto a classe antes de ministrar a aula. Doh!

    
por 28.09.2012 / 13:40