5

私は Maven の初心者なので、些細なことでしたら申し訳ありません。基本的に、私は webapp を開発しており、Maven を使用してプロジェクトを管理しています。pom.xmlに<packaging>war</packaging>あるので、 を実行mvn packageすると、Web サーバーにデプロイする war ファイルが吐き出されます。

現在、このアプリケーションの一部として、戦争として配信され、Web サーバーに個別に展開されているサードパーティのライブラリを使用しています。この戦争には、私たちがコーディングしたカスタム統合機能が含まれています。永続化ロジックについては、もともとこの統合コードで直接リポジトリを作成したところです。(基本的な SELECT よりも) より多くの永続化ロジックが必要であることがわかったので、アプリケーション コードで見つかったリポジトリとドメイン オブジェクトを使用したいと考えています。したがって、理想的には、コア パッケージを jar ファイルにして、その jar ファイルをこのサード パーティの戦争に含めて、そこで同じ機能を利用できるようにしたいと考えています。

pom.xml を設定して、この jar に必要なパッケージ (または必要に応じて 1 つのパッケージのみ) を指定する方法と、jar 自体を作成する方法がわかりません。プロジェクト全体を戦争としてパッケージ化するように設定されたプロジェクト内の特定のパッケージから jar を生成する方法はありますか?

Maven jar プラグインに関する情報を見つけましたが、「プロジェクトのパッケージ化が「jar」に設定されている場合、このプラグインは「パッケージ」フェーズを通過するたびに実行されます。」私のプロジェクトのパッケージングは​​ jar に設定されていません。このプラグインを使用する方法はまだありますか?

4

4 に答える 4

6

一方のモジュールにドメイン クラスが含まれ、もう一方のモジュールが Web アプリケーションであるマルチ モジュール プロジェクトを作成できます。そうすることで、外部のサードパーティwarはそれを含めるだけでドメインクラスを使用できますjar

これは、ディレクトリ構造の簡単な概要です。

.
├── pom.xml
├──ドメイン
| | ├── pom.xml
| | └── src
| | └──メイン
| | └──ジャワ
| | └──コム
| | └──スタックオーバーフロー
| | └──ドメイン
| | ├── SomeDao.java
| | └──AnotherDao.java
└──ウェブ
    ├── pom.xml
    └── src
        └──メイン
            ├──ジャワ
            | | └──コム
            | | └──スタックオーバーフロー
            | | └──ウェブ
            | | └──SomeBackingBean.java
            └──ウェブアプリ
                └──WEB-INF
                    └──web.xml

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stackoverflow</groupId>
    <artifactId>Q12576767</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <modules>
        <module>domain</module>
        <module>web</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <!-- Inter-Module dependencies -->
            <dependency>
                <groupId>com.stackoverflow</groupId>
                <artifactId>Q12576767-domain</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

ドメイン/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>Q12576767</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>Q12576767-domain</artifactId>

    <name>${project.artifactId}-${project.version}</name>
</project>

web/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>Q12576767</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>Q12576767-web</artifactId>
    <packaging>war</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <dependencies>
        <dependency>
            <groupId>com.stackoverflow</groupId>
            <artifactId>Q12576767-domain</artifactId>
        </dependency>
    </dependencies>
</project>

このようにすることで、いくつかの依存関係を切り離し、モジュールjarからファイルを再利用できます。domain


また、最後に、オーバーレイを使用しwarて、サードパーティwarを独自のwar. あなたのセットアップで実現可能かどうかはわかりませんが、検討する価値はあります。私はそれをうまく使いました。

于 2012-09-25T07:22:27.430 に答える
2

pom ファイルは 1 つの Java/Web プロジェクトに属し、Java プロジェクトの個々のパッケージに属していないため、一部のパッケージから jar ファイルを作成できるとは思いません。たとえば xyz-common という名前の新しい Java プロジェクトを作成できます。このプロジェクトには、他の war ファイルと共有されるコードが必要です。次に、mvn install を実行するだけで、xyz-common jar がいくつかのバージョンで作成されます。次に、依存関係のある共通の jar を必要とする war ファイルの pom ファイルを更新します。

あなたのJavaパッケージはwarファイルの中にあると思いますか? その場合は、新しい Java プロジェクトを作成し、Java コードを war ファイルと密結合しないでください。war ファイルでは、jar ファイルの依存関係について言及するだけです。

于 2012-09-25T06:20:45.863 に答える
0

mvn archetype:generateコマンドでプロジェクトを生成しようとしましたか? war パッケージを使用して、Web アプリ用の完全に機能するプロジェクト構造を構築します。

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
于 2012-09-25T05:53:21.990 に答える