7

EJB クライアントの依存関係を使用して、UI プロジェクトに多数のビジネス サービスを含めるソリューションがあります。Maven でのこれの問題は、クライアントの .jar には通常約 1 ~ 2 個のクラスが含まれているにもかかわらず、サービス アプリケーション全体の完全な依存関係スタックが含まれていることです。.ear ファイルが 1 ポップあたり 50 ~ 100Mb にまで成長し始め、無関係な依存関係が UI アプリケーションに忍び込んでいるために時々厄介なエラーが発生すると、これは少し見苦しくなります。

もちろん、クライアント エンドの依存関係をいつでも除外できますが、その場合、それらのサービスを使用する各クライアント プロジェクトに同じ行を多数記述する必要があり、これは多くの不必要な繰り返しになります。さらに、人々は非常に奇妙なエラー メッセージを思いつき、それらを追跡するのに多くの時間を費やしてから、いくつかのクライアント jar が含まれていて、それがどのような追加の依存関係を方程式にもたらしたかを確認しなかったことを忘れないでください。

例:

        <dependency>
            <groupId>fi.path.to.service</groupId>
            <artifactId>customermanagement-common</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>fi.path.to.service</groupId>
            <artifactId>customermanagement-service</artifactId>
            <classifier>client</classifier>
            <exclusions>
                <exclusion>
                    <groupId>fi.path.to.dependency</groupId>
                    <artifactId>internal-dependency-#1</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.castor</groupId>
                    <artifactId>castor</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>fi.path.to.dependency</groupId>
                    <artifactId>internal-dependency-#2</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#3</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#4</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#5</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor-xml</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor-codegen</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor-xml-schema</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#6</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
            </exclusions>
            <version>2.6</version>
        </dependency>

含まれているのは 1 つのサービス クライアントだけです。複数の異なるアプリケーションにこれらの複数が含まれていると想像してみてください。すべての除外項目を毎回書き出すのは非常に面倒で、プロジェクトの POM はかなり長くなり始めます。

依存関係を提供済みとしてマークしますが、存在しない場合、実行時にクラッシュする依存関係がいくつかあります。外部例外クラスを持つさらに別のアプリへの別のサービス呼び出しを含むものを言います。これは何らかの理由でサービス プロジェクト内にラップされておらず、存在しない場合は実行時に ClassNotFoundException を引き起こします。

したがって、maven-ejb-plugin で pom.xml 仕様を使用することにより、生成中に ejb クライアントからクラスを除外/含めることが可能であることはわかっていますが、依存関係も除外する方法はありますか?

4

2 に答える 2

1

Maven は、1 つのモジュールから複数の jar を作成することをうまくサポートしていないようです。

したがって、私たちが見つけた唯一の合理的な方法は、別のモジュールを作成し (xxx-service を xxx-service と xxx-service-client に分割し)、xxx-service-client モジュールを構成して EJB クライアント/デリゲートのみを持つようにすることです。クラスと最小限の依存関係。そうすれば、プロジェクトは 1 回の実行でビルドできます。

于 2013-05-24T07:29:07.557 に答える