首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GreeterEJB和GreeterLibrary之间依赖的本质是什么?

GreeterEJB和GreeterLibrary之间依赖的本质是什么?
EN

Stack Overflow用户
提问于 2015-02-25 23:24:03
回答 1查看 47关注 0票数 0

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

代码语言:javascript
复制
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会给出以下错误:

代码语言:javascript
复制
Error in annotation processing: {0}.
java.lang.NoClassDefFoundError: net/bounceme/doge/greeter/ejb/GreeterRemote

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
package net.bounceme.doge.greeter.ejb;

import javax.ejb.Stateless;

@Stateless
public class GreeterBean implements GreeterRemote {

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

}

更友好的远程接口:

代码语言:javascript
复制
package net.bounceme.doge.greeter.ejb;

import javax.ejb.Remote;

@Remote
public interface GreeterRemote {

    String greeting();
    
}

添加到glassfish中的GreeterLibrary JAR文件:

代码语言:javascript
复制
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:~$ 

我记得以前用远程接口做过像这样的东西,但我似乎忘记了使用远程接口的关键一步,目前无法找到合适的谷歌术语。我确信在Glassfish手册的某个地方有一个关于EJB依赖项的部分,以及它们的去向.

现在,我只想知道依赖关系的性质类型,这样我至少知道谷歌的目的是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-26 11:12:16

您不希望将您自己开发的依赖项放在Glassfish lib文件夹中。这可能足以用于生产用途,但不足以用于发展。

为了做好这件事,你需要一只耳朵。

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

耳朵的结构将与此类似:

代码语言:javascript
复制
/EAR
/EAR/GreeterEJB.jar
/EAR/lib
/EAR/lib/GreeterLibrary.jar
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28731694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档