Intellij IDEA包含Maven已包含的其他模块

时间:2013-08-06 22:53:34

标签: java maven tomcat intellij-idea

我有一个基于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中找到了解决这个问题的方法是徒劳无功的 - 有人知道如何阻止这种行为(包括共同居住的项目)吗?

3 个答案:

答案 0 :(得分: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将使用您设置的Maven构建任务来创建WAR,而不是使用自己的“Make”命令。

答案 1 :(得分:1)

我在IDEA遇到了同样的问题。

发生此问题的原因是您在启动Tomcat之前在IDEA中运行了mvn clean package(or install)

mvn clean package将生成Maven指定的JAR(MyAppDomain-1.0.0.jar),但启动 Tomcat将生成没有版本化的JAR(MyAppDomain.jar)。这就是你的类路径中有两个相同的jar的问题。

要解决此问题,只需在启动Tomcat之前在IDEA中手动运行mvn clean ,如果您已经运行mvn clean package

答案 2 :(得分:1)

我也是刚遇到这个问题。生成的war包含相同依赖项的两个版本(这是一个模块),这导致了问题。

我必须在IntelliJ中编辑我的tomcat启动配置:

  1. 修改启动配置
  2. 单击您的tomcat配置,然后转到部署标签
  3. 在窗口底部,添加&#34; 发布前&#34;任务点击加号图标
  4. 选择运行Maven目标
  5. 写&#34;清洁&#34;作为命令行和接受 maven goal clean
  6. 在Build
  7. 之前将任务移至顶部