1

Maven ベースの 2 モジュール Intellij プロジェクトがあり、次のように編成されています。

MyAppProject
    --->MyAppDomain (builds a JAR)
    --->MyAppWAR (builds a WAR, including the JAR above)

Maven を使用してプロジェクトをビルドすると、結果の WAR に MyAppDomain.JAR が依存関係として含まれます。

<dependency>
    <groupId>com.mycompany.myapp</groupId>
    <artifactId>MyAppDomain</artifactId>
    <version>1.0.0</version>
</dependency>

この WAR は Tomcat で動作します。ただし、Intellij Idea Ultimate の適切な Tomcat 統合を使用してビルドすると、WAR は次のエラーで失敗します (読みやすいようにフォーマットされています)。

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': 
Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/config/data-context.xml]: 
Invocation of init method failed; nested exception is java.lang.IllegalStateException: 
Conflicting persistence unit definitions for name 'caPersistenceUnit': 
file:/C:/JavaSoftware/apache-tomcat-6.0.32/webapps/MyApplication/WEB-INF/lib/MyAppDomain.jar, file:/C:/JavaSoftware/apache-tomcat-6.0.32/webapps/MyApplication/WEB-INF/lib/MyAppDomain-1.0.0.jar

そのため、IDEA には Maven で指定された JAR (MyAppDomain-1.0.0.jar) が含まれており、すべて同じファイルを含むこの JAR (MyAppDomain.jar) の独自のバージョンも含まれているようです。

Intellij IDEA でこれをオフにする方法を無駄に検索しました。この動作を停止する方法を知っている人はいますか (共存プロジェクトを含む)?

4

3 に答える 3

1

この動作をオフにする方法を見つけることはできませんでしたが、WAR を正しくビルドする回避策を見つけました。

  1. Select "Run -> Edit Configurations" from the menu. 
  2. Select your"Tomcat Server" job. 
  3. Click the "Deployment" tab. 
  4. At the bottom, where it says "Before Launch:  Another Configuration,"  delete the "Make" option. 
  5. Click the "+" (plus) sign and select your Maven Build task to add it to the "Before Launch" list.

これにより、Intellij は独自の「Make」コマンドを使用する代わりに、設定した Maven ビルド タスクを使用して WAR を作成します。

于 2013-08-07T17:10:22.537 に答える
1

IDEAでも同じ問題に遭遇しました。

この問題はmvn clean package(or install)、Tomcat を開始する前に IDEA で実行したために発生しました。

mvn clean packageMaven で指定された JAR (MyAppDomain-1.0.0.jar) を生成しますが、Tomcat を開始すると、バージョンが指定されていない JAR (MyAppDomain.jar) が生成されます。これが、クラスパスに 2 つの同じ jar があるという問題です。

この問題を解決するには、Tomcat を実行したことがある場合は、起動する前に IDEAで手動で実行mvn cleanmvn clean packageしてください。

于 2013-12-27T05:58:40.220 に答える