Como executo uma classe em um WAR a partir da linha de comando?
Eu tenho uma classe Java que tem um main e eu costumava executar como um aplicativo independente a partir da linha de comando, e.
java -jar myjar.jar params
Eu precisava reempacotar o código para ser executado sob o apache e todo o meu código, incluindo a classe de ponto de entrada do jar antigo, acabou em um arquivo WAR para facilitar o depósito no servidor da web.
No entanto, eu ainda quero ser capaz de executá-lo a partir da linha de comando e o código não foi alterado e está tudo lá, só não consigo descobrir como fazê-lo funcionar.
Aqui está o que eu tentei ...
Eu presumi que a guerra era como um pote, então
java -jar mywar.war params
Isso falhou dizendo que não havia classe principal definida no manifesto.
Eu adicionei manualmente um manifesto à guerra e tentei novamente, com o mesmo efeito.
Notei que na minha guerra eu tinha uma pasta chamada META-INF contendo um manifest.mf, então eu adicionei uma linha para declarar minha classe principal como faria para um manifesto normal ...
Manifest-Version: 1.0
Main-Class: mypackage.MyEntryPointClass
Isso deu umanoClassDefFoundError mypackage.MyEntryPointClass
, que é um tipo de progresso. Isso me levou a acreditar que era apenas uma questão de caminho, então eu tentei
Manifest-Version: 1.0
Main-Class: WEB-INF.classes.mypackage.MyEntryPointClass
Agora recebo o mesmo erro, mas com um rastreamento de pilha ...
Exception in thread "main" java.lang.NoClassDefFoundError: WEB-INF/classes/mypackage/MyEntryPointClass (wrong name: mypackage/MyEntryPointClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Eu pesquisei um pouco mas não consegui encontrar nada que responda à minha pergunta, e eu li algumas outras perguntas aqui que são um pouco diferentes, então eu pensei em postar.
Java 1.5, não que eu acho que deveria fazer alguma diferença.