3

これが私が達成したいことです:

  • 1 イヤーパッケージ: all.ear
  • ear-package には 2 つの war が含まれています (耳の付け根に A.war、B.war)
  • ear-package には、1 つの自作の jar C と多数のサードパーティの jar が含まれています (APP-INF\lib の下)。

このパッケージは JBoss WildFly 8.2.1 にデプロイする必要があります

Maven の ear プラグイン (maven-ear-plugin、バージョン 2.10.1) を使用しています。pom での私の構成は次のようになります (これは、他の 3 つのプロジェクトを組み合わせた「親」プロジェクトです)。

<configuration>
    <finalName>All</finalName>
    <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
    <includeLibInApplicationXml>true</includeLibInApplicationXml>
    <version>6</version>
    <displayName>All</displayName>
    <modules>
        <jarModule>
            <groupId>project</groupId>
            <artifactId>C</artifactId>
            <bundleFileName>C.jar</bundleFileName>
            <uri>APP-INF/lib/C.jar</uri>
            <bundleDir>APP-INF/lib</bundleDir>
        </jarModule>
        <webModule>
            <groupId>project</groupId>
            <artifactId>A</artifactId>
            <uri>A.war</uri>
            <bundleFileName>A.war</bundleFileName>
            <contextRoot>/a</contextRoot>
            <bundleDir>/</bundleDir>
        </webModule>
        <webModule>
            <groupId>project</groupId>
            <artifactId>B</artifactId>
            <uri>B.war</uri>
            <bundleFileName>B.war</bundleFileName>
            <contextRoot>/b</contextRoot>
            <bundleDir>/</bundleDir>
        </webModule>
    </modules>
    <archive>
        <manifestEntries>
            <Implementation-Version>1.0</Implementation-Version>
        </manifestEntries>
    </archive>
</configuration>

META.INF/application.xml ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_6.xsd">
    <display-name>All</display-name>
    <initialize-in-order>true</initialize-in-order>
    <module>
        <java>APP-INF/lib/C.jar</java>
    </module>
    <module>
        <web>
            <web-uri>B.war</web-uri>
            <context-root>b</context-root>
        </web>
    </module>
    <module>
        <web>
            <web-uri>A.war</web-uri>
            <context-root>a</context-root>
        </web>
    </module>
    <library-directory>APP-INF/lib</library-directory>
</application>

イヤーパッケージが作られています。すべてのサードパーティの jar は APP-INF/lib の下にありますが、C.jar はルート ディレクトリにあります。

パッケージを JBoss にアップロードしようとすると、いろいろいじり、さまざまなエラーが発生しました。

 Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS016703: Module may not be a child of the EAR's library directory. Library directory: APP-INF/lib, module file name: APP-INF/lib/[SomeThirthPartyLib].jar"

すべてのライブラリをルートの下に配置すると (APP-INF を使用しないでください)、B.war の ClassNotFoundError が発生しました (C.jar からクラスが見つかりません)。

「jboss」タグを maven-ear-plugin (構成) に追加しようとしましたが、それらは JBoss 8+ ではサポートされていません。

JBoss にデプロイでき、2 つの war と、両方の war から参照される 1 つの jar を含む .ear パッケージが必要です。

私は何が欠けていますか?(特定のマニフェスト構成? A、B、または C の特定の pom.xml 設定? JBoss 設定? ...?)

4

2 に答える 2