java - GreeterEJB 和 GreeterLibrary 之间的依赖关系的本质是什么?

标签 java netbeans ant jar glassfish

GreeterEJB 构建为 JAR 时,它不会使用依赖项的 libs 文件夹进行构建:

thufir@doge:~$ 
thufir@doge:~$ ll NetBeansProjects/GreeterEJB/dist/
total 20
drwxrwxr-x 2 thufir thufir 4096 Feb 25 14:34 ./
drwxrwxr-x 6 thufir thufir 4096 Feb 25 14:34 ../
-rw-rw-r-- 1 thufir thufir 2802 Feb 25 14:34 GreeterEJB.jar
thufir@doge:~$ 

但是,在部署时,Glassfish 会出现以下错误:

Error in annotation processing: {0}.
java.lang.NoClassDefFoundError: net/bounceme/doge/greeter/ejb/GreeterRemote

因为我认为它找不到 GreeterRemote 类,因为该类位于不同的 JAR 中:

thufir@doge:~$ 
thufir@doge:~$ jar -tf NetBeansProjects/GreeterLibrary/dist/GreeterLibrary.jar | grep class
net/bounceme/doge/greeter/ejb/GreeterRemote.class
thufir@doge:~$ 

这种依赖性的本质是什么?这与将类添加到项目的类路径有什么不同?至少在 Netbeans 中,例如,当 JDBC 驱动程序添加到类路径时,该驱动程序将与构建的 JAR 一起显示在 libs 文件夹中。

ejb:

package net.bounceme.doge.greeter.ejb;

import javax.ejb.Stateless;

@Stateless
public class GreeterBean implements GreeterRemote {

    @Override
    public String greeting() {
        return "hello remote world";
    }

}

欢迎远程接口(interface):

package net.bounceme.doge.greeter.ejb;

import javax.ejb.Remote;

@Remote
public interface GreeterRemote {

    String greeting();
    
}

GreeterLibrary JAR 文件已添加到 glassfish:

thufir@doge:~$ 
thufir@doge:~$ ll glassfish-4.1/glassfish/lib/*.jar
-rw-r--r-- 1 thufir thufir    2694 Feb 22 18:56 glassfish-4.1/glassfish/lib/appserv-rt.jar
-rw-rw-r-- 1 thufir thufir   20020 Feb 25 06:06 glassfish-4.1/glassfish/lib/EJBRemoteInterface.jar
-rw-r--r-- 1 thufir thufir   22189 Feb 22 18:56 glassfish-4.1/glassfish/lib/gf-client.jar
-rw-r--r-- 1 thufir thufir    3193 Feb 22 18:56 glassfish-4.1/glassfish/lib/javaee.jar
-rw-r--r-- 1 thufir thufir    1398 Feb 22 18:56 glassfish-4.1/glassfish/lib/jndi-properties.jar
-rw-r--r-- 1 thufir thufir 1006015 Feb 23 16:58 glassfish-4.1/glassfish/lib/mysql-connector-java.jar
thufir@doge:~$ 
thufir@doge:~$ ll glassfish-4.1/glassfish/domains/domain1/lib/*.jar
-rw-rw-r-- 1 thufir thufir 20020 Feb 25 06:06 glassfish-4.1/glassfish/domains/domain1/lib/EJBRemoteInterface.jar
thufir@doge:~$ 
thufir@doge:~$ ll glassfish-4.1/glassfish/domains/domain1/lib/classes/*.jar
-rw-rw-r-- 1 thufir thufir 20020 Feb 25 06:06 glassfish-4.1/glassfish/domains/domain1/lib/classes/EJBRemoteInterface.jar
thufir@doge:~$ 
<小时/>

我记得做过something like this之前使用过远程接口(interface),但我似乎忘记了远程接口(interface)的关键步骤,并且目前无法找到正确的Google术语。我确信 Glassfish 手册中的某个地方有一个关于 EJB 依赖项及其去向的部分...

现在,我只想知道这种依赖的性质类型,这样我至少知道要 Google 搜索什么内容。

最佳答案

您不想将自己开发的依赖项放置在 Glassfish lib 文件夹中。这对于生产使用来说可能足够了,但对于开发来说就不够了。

要正确执行此操作,您需要 EAR。

在 EAR 内,您可以为依赖项创建一个 lib 文件夹。

EAR 结构将类似于以下内容:

/EAR
/EAR/GreeterEJB.jar
/EAR/lib
/EAR/lib/GreeterLibrary.jar

关于java - GreeterEJB 和 GreeterLibrary 之间的依赖关系的本质是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731694/

相关文章:

java - 如何在 Tomcat 上保存时不部署

mysql - 重新部署后,Netbeans 将数据库表类型从 InnoDB 更改为 MyISAM。

java - Apache Ant 中的 java 任务问题

java - 我是否需要设置 Maven 才能使用 Maven ant 依赖任务?

使用 ant 构建 Android 应用程序 - android_rules.xml 怎么样?

java - OPTIONS 请求处理程序应在 API 处理程序之前调用

java - 如何将 Firebase 数据转换为 Java 对象...?

java - 将 .java 文件导入 Netbeans 中的 Java 项目

java字符串全部替换

java - 使 javax 验证错误消息更具体