在一个EAR中部署多个依赖的CDI jar - java

我有一个关于如何部署包含CDi实现和Webapp的多个jar的问题。

这是我的罐子结构

--------     ----------      ------------
| WAR  | <-- | API Jar | <-- | Data Jar |
--------     ----------      ------------ 
                  ^
                  |
           --------------  
           | Common Jar |    And many more implementations
           --------------                  

WAR本身就是webapp,它使用在API Jar中定义的类。 API jar仅包含接口,注释,非逻辑类,限定符等。

API的实现存储在不同的JAR中,按主题划分。因此,所有在数据,安全性,日志记录,通用等方面的数据访问/操纵实现。此实现依赖于API Jar以及库。所有程序包都传达低谷事件。

我们在每个实现和Web应用程序中都使用CDI。完整的配置仅在WAR中。

我想将所有东西部署在一个EAR中。这就是我使用的文件结构:

EAR
  - META-INF/application.xml
  - api.jar
    - api classes, no beans.xml here
  - common.jar
    - api implementation for common project classes
    - META-INF/beans.xml
  - data.jar
    - api implementation for data classes
    - META-INF/beans.xml
  - logging.jar
    - api implementation for logging classes
    - META-INF/beans.xml
  - webapp.war
    - classes 
      - ( project classes which uses the api)
      - META-INF
        - services
        - persistence.xml
    - WEB-INF/beans.xml
      - beans.xml
      - web.xml

我的application.xml看起来像这样:

<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
  <display-name>test-ear</display-name>
  <module>
    <java>api-1.0.0.jar</java>
  </module>
  <module>
    <java>common-package-1.0.0.jar</java>
  </module>
  <module>
    <java>data-package-1.0.0.jar</java>
  </module>
  <module>
    <java>logging-package-1.0.0.jar</java>
  </module>
  <module>
    <web>
      <web-uri>test-war-1.0.0.war</web-uri>
      <context-root>/war</context-root>
    </web>
  </module>
</application>

我的问题是,现在根本不起作用。 CDI容器抱怨缺少一些bean。我在google上搜索了有关的内容,发现其中包含beans.xml的jar被部署为ejbModule,但是在这里我需要为所有内容创建一个ejb.jar。另一个结果说,我只需要将所有依赖项添加到WEB-INF / lib中的WAR文件。同样的抱怨在这里。

我无法运行此程序,并尝试在此处寻求帮助。

作为服务器,我想使用Websphere(也许还有tomee)。

编辑:Maven用于将所有文件组装在一起。

非常感谢,如果有人可以帮助我:)

参考方案

您是否尝试过在战争清单中引用您的罐子?

类似于Class-Path: api.jar data.jar logging.jar common.jar

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

Java可执行jar。这段代码做什么? - java

我正在查看Yahoo的YUI压缩程序可执行jar,它们具有此类,从清单文件链接为“ Main-Class”:package com.yahoo.platform.yui.compressor; import java.lang.reflect.Method; public class Bootstrap { public static void main(S…

无法从ArrayList <String>转换为List <Comparable> - java

当我写下面的代码时,编译器说 无法从ArrayList<String>转换为List<Comparable>private List<Comparable> get(){ return new ArrayList<String>(); } 但是当我用通配符编写返回类型时,代码会编译。private List&l…

合并List <T>和List <Optional <T >> - java

鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…

展平地图中的列表列表 - java

我有订单流(来源是订单列表)。每个订单都有一个客户和一个OrderLine列表。我要实现的目标是在一张简单的列表中以客户为关键的地图,并将属于该客户的所有订单行作为值。现在,通过执行以下操作,我现在管理的内容返回了Map<Customer>, List<Set<OrderLine>>>:orders .collect…