15

2 つの異なる Web アプリケーションがあり、ある戦争のいくつかのコントローラーを別の戦争に拡張したいと考えています。

プロジェクトのビルドにはmavenを使用しています。

戦争を含めるために、その依存関係を次のように指定しました

<dependency>
            <groupId>com.abc.exchange</groupId>
            <artifactId>employer</artifactId>
            <version>2.3.M2-SNAPSHOT</version>
            <type>war</type>
            <scope>compile</scope>
        </dependency>

クラスが見つからないという例外を与えてビルドできません。

これを達成する方法を教えてくれる体はありますか?

maven build failed というエラーが表示されます:

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project agent-war: Compilation failure: Compilation failure:
[ERROR] \projects\trunk_new\agent\src\main\java\com\platform\agent\web\AgentEmployeeController.java:[22,41] cannot find symbol
[ERROR] symbol  : class EmployeeController
[ERROR] location: package com..platform.employer.web
4

6 に答える 6

19

war プラグインを定義して、構成に基づいて分類子を介して使用できる個別の jar ファイルを生成できます。

<configuration>
  ..
  <attachClasses>true</attachClasses>
  <archiveClasses>true</archiveClasses>
</configuration>

その後、これを他のプロジェクトで別の依存関係として使用できます。しかし、それから別のjarモジュールを作成するのが最善です。

于 2012-04-17T10:48:31.033 に答える
9

あなたがしているのは、WAR ファイルのオーバーレイを使用することです。Maven はこれをサポートしています。でも...

WAR プラグインはpackageフェーズで実行されます。このフェーズの前に実行される Java コンパイラ (コンパイル フェーズで実行される) などのプラグインは、WAR プラグインが抽出したファイルを認識しません。(それが役立つ場合は、すべての Maven フェーズの参照リストを次に示します)

プロジェクト構造をリファクタリングできる場合、最善の方法は、コントローラーを使用して通常の JAR プロジェクトを作成し、両方の WAR がこの JAR を依存関係としてプルするようにすることです。

これを行うことができない何らかの理由がある場合は、次のようなことを行う必要があります。

  1. compileなどよりも前のフェーズで実行するように WAR プラグインを構成しgenerate-resources、オーバーレイ クラス ファイルを に抽出するようにします${project.build.outputDirectory}

  2. また、Maven Dependency Plugin のunpackゴールを使用して、依存関係 WAR から にクラスを抽出することもできます${project.build.outputDirectory}

しかし、コントローラーを別の JAR にリファクタリングすることが可能であればお勧めします。その方がはるかに簡単で保守しやすいからです。

于 2012-04-17T09:50:47.400 に答える
4

コントローラーを新しいjarプロジェクトに入れ、Webプロジェクトからこのコントローラーへの依存関係を作成します。

于 2012-04-17T09:22:21.090 に答える
2

次のプラグインを共有 maven war モジュールに追加します (war と jar アーティファクトを同時に作成するため)。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>make-a-jar</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>       
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <packaging>jar</packaging>
                        <artifactId>${project.artifactId}</artifactId>
                        <groupId>${project.groupId}</groupId>
                        <version>${project.version}</version>
                        <file>
                            ${project.build.directory}/${project.artifactId}-${project.version}.jar
                        </file>
                    </configuration>
                </execution>
            </executions>
        </plugin> 

次に、依存する maven war モジュールに依存関係を追加します。

于 2013-07-02T10:19:05.737 に答える
1

Java EE 可視性標準では、EAR としてパッケージ化されている場合、ある war のクラスを別の war のクラスで使用できないようにする必要があります。ほとんどのコンテナはこれを厳密に実施します。

共有したいコードを JAR に入れ、それを使用したい war の依存関係として含める必要があります。

于 2012-04-17T09:25:09.323 に答える
1

war プロジェクトに pom.xml を含める

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
            <attachClasses>true</attachClasses>
        </configuration>
</plugin>

これにより、war とともにターゲット フォルダーに your-project-0.0.1-SNAPSHOT-clases.jar が作成されます。

依存プロジェクトに pom.xml を含める

 <dependency>
        <groupId>com.yourproject</groupId>
        <artifactId>you-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <classifier>classes</classifier>
  </dependency>

これは私にとってはうまくいきました。それが役に立てば幸い。

編集: 一部のクラス ファイルのみを jar に入れたい場合は、これを pom.xml に追加します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                            <configuration>
                                <classifier>classifier_name</classifier>
                                <includes>
                                    <include>com/../..</include>
                                </includes>
                            </configuration>
                    </execution>
                </executions>
     </plugin>

依存プロジェクトに pom.xml を含める

 <dependency>
        <groupId>com.yourproject</groupId>
        <artifactId>you-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <classifier>classifier_name</classifier>
  </dependency>

注: 分類子名は両方の pom.xml ファイルで同じでなければなりません

于 2017-04-11T06:49:47.793 に答える