Glassfish部署错误“无法识别MyProject.jar的存档类型”

时间:2015-01-19 01:10:07

标签: java rest deployment jar glassfish

我已经创建了一个动态Web应用程序,我想用glassfish部署它。我成功地将我的源代码构建到MyProject.jar。但是当我部署它时,显示以下错误:

  

远程故障:无法识别/home/davenlin/MyProject/build/MyProject.jar的存档类型

我的项目只是一个普通的Restful应用程序,而不是ejb应用程序,所以我不知道我是否必须生成MyProject.war而不是MyProject.jar。

请帮帮我。谢谢!

2 个答案:

答案 0 :(得分:2)

好的,因为我的评论相当无法解释:
Web应用程序由应用程序服务器或servlet容器处理 两者都为你做了很多工作,而且网页应用程序无法比拟 桌面或独立的Java应用程序。
虽然您的独立应用程序部署为jar文件,然后由JVM执行,但是Web应用程序是 由容器(应用程序服务器/ servlet容器)执行 因此,这确实需要您的应用程序提供其他配置,并使归档本身具有不同的结构。
因此,即使您只是公开一些Web服务来构建一个安静的应用程序,您的应用程序服务器也会为您做些事情,例如 将请求转发到正确的类,将查询和后期参数转换为java - 可由您自己的类访问的对象分别为您自己的对象并将您的响应返回给客户端。
有趣的是:
Web中的附加文件 - 存档通常是xml - 文件和web - 相关文件,如html,css,js。 所以这并不区分战争和罐子,因为你也可以在罐子里包装其他资源。
对战争文件的基本但现在过时的要求是它包含
部署描述符(也是一个xml文件)
配置你的应用程序,它的上下文和它使用的相对URL(更具体:url - 模式),但由于这个要求已经过时,有人可能仍然认为这种区别也是过时的。

答案 1 :(得分:0)

从您的代码中替换leambda表达式,然后重试。

[编辑]

就我而言。我有pom.xml文件的maven项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test.ejb</groupId>
    <artifactId>leambda-ejb</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    </dependencies>


    <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    </build>
</project>

,以及包含此内容的EJB:

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() {

            }
        });
    }
}

使用maven构建.jar工件时,将其成功部署到Glassfish 4.1服务器。

但是,如果在Test EJB中,将使用leambda表达式创建Thread,例如

    Thread thread = new Thread(() -> {

    });

,比部署Glassfish会显示错误行:

    remote failure: Archive type of /mnt/2/Projects/IdeaProjects/TestEJB/target/leambda-ejb-1.0-SNAPSHOT.jar was not recognized
    Command deploy failed.

,在server.log文件中将为行:

    [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]]