【问题标题】:Is there a permanent fix for Eclipse Deployment Assembly losing the Maven Dependencies?Eclipse 部署程序集丢失 Maven 依赖项是否有永久修复?
【发布时间】:2015-10-08 08:00:08
【问题描述】:

我遇到了与此类似的问题 (java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener),我的情况不同之处在于,常见修复(将 Maven 依赖项添加到部署程序集)只是暂时的,并且每次执行 Maven 更新时都会中断,即不太频繁,但足以令人讨厌。

有永久修复吗?

详情

这是我得到的错误

我去这里修复它:

那么这里:

终于到了……

修复后的外观如下:

这是我的 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ctc.web.proyect</groupId>
  <artifactId>front.web</artifactId>
  <packaging>war</packaging>
  <version>0.2.5</version>
  <name>front.web</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <javax.servlet.version>3.1.0</javax.servlet.version>
        <javax.servlet.jstl>1.2</javax.servlet.jstl>
        <org.springframework.version>4.1.5.RELEASE</org.springframework.version>
        <thymeleaf.version>2.1.4.RELEASE</thymeleaf.version>
        <jackson.version>2.5.3</jackson.version>
        <mysql.version>5.1.30</mysql.version>
        <c3p0.version>0.9.1.2</c3p0.version>
        <logback.version>1.1.1</logback.version>
        <slf4j.version>1.7.7</slf4j.version>
        <testng.version>6.8.8</testng.version>
        <commons-lang3.version>3.3.2</commons-lang3.version>
        <mockito.version>1.9.5</mockito.version>
        <cglib.version>2.2.2</cglib.version>
        <guava.version>18.0</guava.version>
        <commons-collections.version>3.2.1</commons-collections.version>
        <commons-validator.version>1.4.1</commons-validator.version>
        <javax.mail.version>1.4.7</javax.mail.version>
        <org.aspectj.version>1.8.6</org.aspectj.version>
        <apache.lucene.version>5.3.0</apache.lucene.version>
    </properties>

  <dependencies>

<!--   JAVAX SERVLET LIB DEPENDENCY -->
    <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jstl</artifactId>
       <version>${javax.servlet.jstl}</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${javax.servlet.version}</version>
    </dependency>

        <!--
                SPRING DEPENDENCIES
        -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${org.springframework.version}</version>
      <exclusions>
        <exclusion>
            <artifactId>commons-logging</artifactId>
            <groupId>commons-logging</groupId>
        </exclusion>
      </exclusions>
    </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-expression</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>   
        <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
        <version>${thymeleaf.version}</version>
        </dependency>    
        <!--
            JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, spring-tx)
            Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*)
        -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-oxm</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
            <scope>test</scope>
        </dependency>
<!--        JACKSON LIB DEPENDENCY FOR JSON SER/DES -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
<!--        MYSQL DB LIB -->
        <dependency>    
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>       
<!-- LogBack dependencies --> 
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>                                    
            <groupId>org.slf4j</groupId>                
            <artifactId>jcl-over-slf4j</artifactId>     
            <version>${slf4j.version}</version>  
        </dependency>               
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>

<!--        COMMONS LIB DEPENDCY -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>${commons-collections.version}</version>
        </dependency>       
        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>${commons-validator.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
<!--        GUAVA. We still use it in java 8 for immutable collections -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>           

<!--            TESTING DEPENDENCY -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${mockito.version}</version>
        </dependency>   
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>${cglib.version}</version>
        </dependency>
        <dependency>
        <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>${javax.mail.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj.version}</version>
         </dependency>
         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjweaver</artifactId>
             <version>${org.aspectj.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.lucene</groupId>
             <artifactId>lucene-core</artifactId>
             <version>${apache.lucene.version}</version>
         </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>${apache.lucene.version}</version>
        </dependency>        
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queries</artifactId>
            <version>${apache.lucene.version}</version>
        </dependency>
       <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>${apache.lucene.version}</version>
        </dependency>       
<!--         <dependency> -->
<!--            <groupId>org.compass-project</groupId> -->
<!--            <artifactId>compass</artifactId> -->
<!--            <version>2.2.0</version> -->
<!--        </dependency> -->
        <dependency>
          <groupId>com.google.api-client</groupId>
          <artifactId>google-api-client</artifactId>
          <version>1.20.0</version>
          <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>




  <build>
    <finalName>ROOT</finalName>
        <plugins>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.3.2</version>
               <inherited>true</inherited>
               <configuration>
                     <source>1.8</source>
                     <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
  </build>
</project>

每当我执行 Maven 更新时,我都需要手动重复所有步骤来修复 Web 部署程序集。我实际上已经有这个问题好几个月了。任何建议将不胜感激。

【问题讨论】:

  • 我们缺少太多信息无法回答:发布您的 pom.xml,究竟发生了什么,您做了什么,您期望什么,等等。
  • 感谢您的反馈,我刚刚添加了很多细节。

标签: eclipse maven m2eclipse


【解决方案1】:

此类问题通过以下方式解决:

  • 获取最新版本的Eclipse IDE for Java EE Developers。截至今天,这是 Eclipse Mars 4.5。请务必选择 64 位版本(如果您的计算机是 64 位)并安装最新的 64 位 JDK(截至今天,这是 jdk-8u60)。
  • 通过在首选项中选择已安装的 JDK(“Java > 已安装的 JRE”)在 Eclipse 中正确设置 JRE。
  • 拥有最新的m2em2e-wtp 插件。这是通过转到“Help > Install New Software...”来完成的,将this URL 设置为m2ethis URL 设置为m2e-wtp,然后安装每个建议的软件(不要忘记在那之后重新启动Eclipse) .
  • 在 Eclipse 中正确设置服务器:在“服务器”视图中,右键单击并选择“新建 > 服务器”,然后按照特定服务器的步骤操作;最后,您需要通过“添加和删除...”屏幕添加您的 war
  • 在 Eclipse 中通过选择项目并转到“项目 > 清理”来清理项目。
  • 通过在 Eclipse 中右键单击项目并转到“Maven > 更新项目...”来更新 Maven 项目。
  • 通过右键单击服务器并选择“清理”来清理服务器(这取决于您的服务器,但通常有一个“清理”选项)。

我建议您在全新的 Eclipse 安装中执行所有这些步骤,以避免一般的缓存问题。

附带说明一下,您的 POM 存在几个问题:

  • javax.servlet:javax.servlet-api 依赖项需要具有 provided 范围,因为此依赖项始终由 Web 服务器在运行时提供。
  • javax.servlet:jstl 依赖可能不需要compile 范围,runtime 就足够了。
  • 您在不需要时声明了很多 Spring 依赖项:它们仍将被包含在内,因为它们已经是其他工件的传递依赖项。因此,您可以删除 spring-aopspring-beansspring-contextspring-expressionspring-txspring-web 的声明。
  • 您的测试依赖项缺少test 范围(testngmockito-all...)
  • &lt;inherited&gt;true&lt;/inherited&gt; 在您的 maven-compiler-plugin 声明中是不必要的,因为这是 the default

最终的 POM 将是:

<?xml version="1.0" encoding="UTF-8"?>
<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>ctc.web.proyect</groupId>
    <artifactId>front.web</artifactId>
    <packaging>war</packaging>
    <version>0.2.5</version>
    <name>front.web</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <javax.servlet.version>3.1.0</javax.servlet.version>
        <javax.servlet.jstl>1.2</javax.servlet.jstl>
        <org.springframework.version>4.1.5.RELEASE</org.springframework.version>
        <thymeleaf.version>2.1.4.RELEASE</thymeleaf.version>
        <jackson.version>2.5.3</jackson.version>
        <mysql.version>5.1.30</mysql.version>
        <c3p0.version>0.9.1.2</c3p0.version>
        <logback.version>1.1.1</logback.version>
        <slf4j.version>1.7.7</slf4j.version>
        <testng.version>6.8.8</testng.version>
        <commons-lang3.version>3.3.2</commons-lang3.version>
        <mockito.version>1.9.5</mockito.version>
        <cglib.version>2.2.2</cglib.version>
        <guava.version>18.0</guava.version>
        <commons-validator.version>1.4.1</commons-validator.version>
        <javax.mail.version>1.4.7</javax.mail.version>
        <org.aspectj.version>1.8.6</org.aspectj.version>
        <apache.lucene.version>5.3.0</apache.lucene.version>
    </properties>

    <dependencies>

        <!-- JAVAX SERVLET LIB DEPENDENCY -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${javax.servlet.jstl}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- SPRING DEPENDENCIES -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring4</artifactId>
            <version>${thymeleaf.version}</version>
        </dependency>
        <!-- JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, 
            spring-tx) Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*) -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- JACKSON LIB DEPENDENCY FOR JSON SER/DES -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- MYSQL DB LIB -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- LogBack dependencies -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>

        <!-- COMMONS LIB DEPENDCY -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>${commons-validator.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- GUAVA. We still use it in java 8 for immutable collections -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>

        <!-- TESTING DEPENDENCY -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>${cglib.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>${javax.mail.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${org.aspectj.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>${apache.lucene.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>${apache.lucene.version}</version>
        </dependency>
        <!-- <dependency> -->
        <!-- <groupId>org.compass-project</groupId> -->
        <!-- <artifactId>compass</artifactId> -->
        <!-- <version>2.2.0</version> -->
        <!-- </dependency> -->
        <dependency>
            <groupId>com.google.api-client</groupId>
            <artifactId>google-api-client</artifactId>
            <version>1.20.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <finalName>ROOT</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

您可能想要解决的另一个问题是您的 groupIdartifactId 不遵循 Maven 约定:更喜欢使用 - 作为分隔符而不是 .

【讨论】:

  • 这是我不想听到的众所周知的答案,但它奏效了。
  • @AlexR 如果这是因为我建议使用最新的 Eclipse,请不要害怕。它也应该在 Luna 下工作,可能你不需要重新安装。尝试在您当前的安装上执行我的答案中的步骤,看看它是否有效(特别是安装/更新 m2e 和 m2e-wtp)
  • Luna 已经在我第三次重新安装了。所以我去重新安装 Mars,它很顺利。
  • 已经完成了这个答案的所有建议(甚至是基本的)。使用最新的插件版本(霓虹灯版本)。我们不明白为什么 Eclipse 不部署与 Maven 相同的构建。它在笑……我什至在WEB-INF/classes 中部署了资源和类测试。其他人有解决部署组装错误的想法吗?谢谢
  • 这显然是问题所在……对某些人来说,它有效,而另一些人则无效。我有所有 m2e 插件和 m2e-wtp(全部更新)的经典安装。 Eclipse 自己进行配置/执行变得如此痛苦。
【解决方案2】:

您的Pom.xml 似乎还不错。但是,如果您右键单击您的项目,“maven”下应该有一个选项可以“启用依赖项管理”。而已。 PS:如果您使用 m2eclipse,请避免使用 maven-eclipse-plugin。绝对不需要它,它会令人困惑,它会产生一些混乱。除非你真的知道自己在做什么,否则不要使用它。

希望这会有所帮助。

【讨论】:

  • 我没有找到“启用依赖管理”。我忘了说我还在月球上,也许这在火星上是新事物?
  • 我认为他在谈论“启用工作区分辨率”。无论如何,它应该默认开启。
【解决方案3】:

它的列表很长 - 对我来说没有安装 m2e 和 m2e-wtp,“通过选择它并转到“项目 > 清理”来清理 Eclipse 中的项目。”选择默认配置文件运行 maven 构建。

【讨论】:

    【解决方案4】:

    由于我有类似的问题,解决方案是将包装更改为 pom.xml 中的“战争”。

    <packaging>war</packaging>
    

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 2015-09-17
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2012-10-07
      相关资源
      最近更新 更多