Eu criei um aplicativo da web dynamic e gostaria de implantá-lo com glassfish. Eu consegui construir minhas fonts para MyProject.jar. Mas quando eu implantei, o seguinte erro foi exibido:
falha remota: o tipo de arquivo /home/davenlin/MyProject/build/MyProject.jar não foi reconhecido
Meu projeto é apenas um aplicativo Restful normal, não um aplicativo ejb, portanto, não sei se devo gerar um MyProject.war em vez de MyProject.jar.
Ok, porque o meu comentário foi bastante unexplanatory: Os aplicativos da Web são manipulados por servidores de aplicativos ou contêineres de servlet. Ambos fazem muito trabalho para você e as aplicações web não são comparáveis para aplicativos java desktop ou standalone. Enquanto seus aplicativos independentes são implementados como arquivos jar e, em seguida, executados pela JVM, os aplicativos da web são executados pelo contêiner (servidor de aplicativos / contêiner de servlet). Então, isso requer que seu aplicativo forneça configuração adicional e permite que o próprio arquivo tenha uma estrutura diferente. Então, mesmo se você está apenas expondo alguns serviços da Web para construir um ambiente tranqüilo aplicativo, seu servidor de aplicativos fará coisas para você, como encaminhando solicitações para as classs corretas, traduzir consulta e postar parâmetros em java – objects acessíveis por suas próprias classs respeitosamente seus próprios objects e retornando sua resposta para os clientes. O interessante é: Os arquivos adicionais no web-archive são geralmente xml – arquivos e web – arquivos relacionados, como html, css, js. Então, isso não distingue a guerra da jarra como você também pode empacotar resources adicionais dentro de um jar. O requisito básico, mas agora obsoleto, de um arquivo de guerra é que ele contém um descritor de implantação (que é novamente um arquivo xml) configurar seu aplicativo, seu contexto e o URL relativo (mais concreto: url – patterns) que ele usa mas, como esse requisito é obsoleto, alguém ainda pode pensar que essa distinção também é obsoleta.
Substitua as expressões leambda do seu código e tente novamente.
[EDITAR]
No meu caso. Eu tenho o projeto maven com o arquivo pom.xml
package test.ejb; import javax.ejb.Singleton; /** * Created by me0x847206 on 10/29/15. */ @Singleton public class Test { public void test() { Thread thread = new Thread(new Runnable() { @Override public void run() { } }); } }
Quando o artefato .jar é construído com o maven, ele é implementado com sucesso no servidor Glassfish 4.1.
Mas, se no Test EJB, Thread será criado com expressões leambda, como
Thread thread = new Thread(() -> { });
, em implantar Glassfish mostrará a linha de erro:
remote failure: Archive type of /mnt/2/Projects/IdeaProjects/TestEJB/target/leambda-ejb-1.0-SNAPSHOT.jar was not recognized Command deploy failed.
e no arquivo server.log serão linhas:
[2015-10-29T04:25:20.210+0200] [glassfish 4.1] [WARNING] [NCLS-DEPLOYMENT-00009] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=44 _ThreadName=admin-listener(4)] [timeMillis: 1446085520210] [levelValue: 900] [[ Failed to scan archive for annotations: 1612]] [2015-10-29T04:25:20.211+0200] [glassfish 4.1] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=44 _ThreadName=admin-listener(4)] [timeMillis: 1446085520211] [levelValue: 1000] [[ Archive type of /mnt/2/Projects/IdeaProjects/TestEJB/target/leambda-ejb-1.0-SNAPSHOT.jar was not recognized]]