Eclipse Deployment Assembly是否会永久性地修复丢失Maven依赖项?

Ale*_*x R 10 eclipse m2eclipse maven

我有一个与此类似的问题(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>
Run Code Online (Sandbox Code Playgroud)

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

Tun*_*aki 7

这种问题通过以下方式解决:

  • 获取最新版本的Eclipse IDE for Java EE Developers.截至今天,这是Eclipse Mars 4.5.请务必选择64位版本(如果您的计算机是64位)并安装最新的64位JDK(截至今天,这是jdk-8u60).
  • 通过在Preferences("Java> Installed JREs")中选择已安装的JDK,在Eclipse中正确设置JRE.
  • 拥有最新m2em2e-wtp插件.这是通过将"帮助>安装新软件..."完成后,设定这个网址m2e该URLm2e-wtp,然后在安装所有建议的软件(不要忘了在那之后重新启动Eclipse的).
  • 在Eclipse中正确设置服务器:在"服务器"视图中,右键单击并选择"新建>服务器",然后按照特定服务器的步骤操作; 最后,您需要war通过"添加和删除..."屏幕添加您的内容.
  • 通过选择它并转到"Project> Clean"来清理Eclipse中的项目.
  • 右键单击Eclipse中的项目并转到"Maven> Update Project ..."来更新Maven项目.
  • 通过右键单击服务器并选择"清理"来清理服务器(这取决于您的服务器,但通常是"清除"选项).

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

作为旁注,您的POM存在以下几个问题:

  • javax.servlet:javax.servlet-api依赖项需要具有provided范围,因为此依赖项始终由Web服务器在运行时提供.
  • javax.servlet:jstl依赖可能不需要具有compile范围并且runtime就足够了.
  • 当您不需要时,您将声明许多Spring依赖项:它们仍将被包含,因为它们已经是其他工件的传递依赖项.因此,你可以删除的声明spring-aop,spring-beans,spring-context,spring-expression,spring-txspring-web.
  • 您的测试依赖项缺少test范围(testng,mockito-all...)
  • <inherited>true</inherited>在您的maven-compiler-plugin声明中是不必要的,因为这是默认值.

最终的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>
Run Code Online (Sandbox Code Playgroud)

您可能想要解决的另一个问题是您的groupId并且artifactId不遵循Maven惯例:更喜欢使用-分隔符而不是..

  • 这是我不想听到的众所周知的答案,但它确实有效。 (2认同)
  • 已经完成了这个答案的所有建议(甚至是基本的)。使用最新的插件版本(Neon 版本)。我们不明白为什么 Eclipse 不部署与 Maven 相同的构建。它在笑......我什至在`WEB-INF/classes`中部署了资源和类测试。其他人有修复部署程序集错误的想法?谢谢你 (2认同)
  • 这显然是问题......对某些人来说,它有效,有些则不然.我有一个经典的安装与所有m2e插件和m2e-wtp(全部更新).Eclipse制作自己的配置/执行变得非常痛苦. (2认同)