【问题标题】:Deployment of multiple, depended CDI jars in one EAR在一个 EAR 中部署多个依赖的 CDI jar
【发布时间】:2013-04-11 12:11:34
【问题描述】:

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

这是我的 Jar 结构

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

WAR 本身是使用在 API Jar 中定义的类的 webapp。 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。我搜索了谷歌,发现包含 beans.xml 的 jar 必须部署为 ejbModule,但在这里我需要为所有内容创建一个 ejb.jar。另一个结果说我只需要将所有依赖项添加到 WEB-INF/lib 中的 WAR 文件中。同样的抱怨在这里。

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

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

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

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

【问题讨论】:

    标签: java jakarta-ee deployment cdi ear


    【解决方案1】:

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

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

    【讨论】:

    • 将所有依赖项放在war文件中并在类路径中引用它们是可以的。以为昨天晚上就到了,谢谢验证我。
    • 我认为您甚至可以让它们进入ear 根目录并使用..\foobar.jar 路径引用它
    【解决方案2】:

    添加到 Gab 的答案中,添加到 webapp.war 的清单类路径中 如下使用&lt;optional&gt;true&lt;/optional&gt;

    <dependency>
        <groupId>common</groupId>
        <artifactId>common</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <optional>true</optional>
    </dependency>
    

    https://maven.apache.org/plugins/maven-war-plugin/examples/war-manifest-guide.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2018-02-06
      • 1970-01-01
      • 2013-09-05
      • 2011-02-08
      相关资源
      最近更新 更多