Wildfly 8.1,-不识别我的依赖项,但Glassfish识别



我正在将我的应用程序从Glassfish移植到Wildfly 8.1。应用程序是一个mavenejb项目,它依赖于maven-"java应用程序"-项目,两者在编译时都打包在一个jar文件中。

这是一个maven项目(mvn版本为3.0.5),Java 1.7,它是用Netbeans 8.0.2编写的。

我创建了一个EJB模块,我的可部署文件名为ServerApp-EJB.jar。这个项目有一个@Startupbean,可以从数据库中读取。

EJB模块依赖于我的"域服务"模块,它是一个jar->DomainService-2.0-SNAPSHOT.jar。这个项目包含我的"实体"。

当我在Glassfish中部署我的ejb-app.jar时:

我可以看到Glassfish使用位于我的.m2目录中的DomainService-2.0-SNAPSHOT.jar。

按下"General"的Glassfish选项卡,我可以看到以下内容:

"库">/home/ingo/.m2/repository/se/server/tutorial/web/DomainService/2.0-SNAPSHOT/DomainService-2.0-SNAPSHOT.jar-Glassfish这样管理其依赖关系可能看起来很奇怪,但Glassfish显然就是这样做的。

我知道Wildfly中的类加载与Glassfish中的不同。

我看到了一些关于战争档案和耳朵档案的建议。

我的EJB在pom.xml 中有以下几行

se.nrm.mediaserver

ServerApp ejb

1.0快照

ejb

以及以下依赖项:

  <dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
   <dependency>
        <groupId>se.server.tutorial.web</groupId>
        <artifactId>DomainService</artifactId>
        <version>2.0-SNAPSHOT</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
        <type>jar</type>
    </dependency>
</dependencies>

上面依赖项列表中唯一找不到的文件是我自己的。

有人能建议我做正确的事情吗?我宁愿不改变我的打包风格ejb。

问候,ingo

Wildfly使用基于模块概念的类加载机制。必须在standalone.xml或META-INF/WEB-INF文件夹中的特定jboss-deployment-structure.xml中定义和声明这些模块的依赖项,并且{user.home}/.m2/不是jboss模块的路径之一。

也就是说,将接口声明部署为wildfly中的模块似乎不是一个合乎逻辑的想法。

创建一个application-deployment.ear,并添加applocation-ejb.jar作为其依赖项,这将在应用程序服务器、glassfish、weblogic和wildfly之间进行移植。

最新更新