2015-07-18 1 views
6

У меня была проблема, подобная этой (java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener), разница в моем случае заключается в том, что общее исправление (добавление зависимостей Maven к сборке развертывания) является временным, и оно прерывается каждый раз, когда я делаю обновление Maven, которое не слишком часто , но достаточно, чтобы быть реальной неприятностью.Есть ли постоянное исправление для сборки развертывания Eclipse, теряющей зависимость Maven?

Есть ли постоянное исправление?

ДЕТАЛИ

Это ошибка я получаю enter image description here

И я могу это исправить, перейдя здесь: enter image description here

Тогда здесь: enter image description here

и, наконец, здесь. .. enter image description here

Вот как это выглядит, как только это исправлено: enter image description here

Вот мой 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, мне нужно вручную повторить все шаги для исправить сборку веб-развертывания. У меня была эта проблема в течение нескольких месяцев. Мы ценим любые предложения.

+0

Нам не хватает слишком много информации, чтобы ответить: опубликуйте свой pom.xml, что именно происходит, что вы делаете, чего вы ожидаете и т. Д. – Tunaki

+0

Спасибо за отзыв, я просто добавил тонну деталей. –

ответ

6

Эта проблема решается с помощью:

  • получая последнюю версию Eclipse IDE for Java EE Developers. На сегодняшний день это Eclipse Mars 4.5. Обязательно выберите 64-битную версию (если ваш компьютер - 64 бит) и установите последнюю версию 64-разрядного JDK (на сегодняшний день это jdk-8u60).
  • Правильная настройка JRE в Eclipse путем выбора установленного JDK в настройках («Java> Установленные JRE»).
  • с обновлением m2e и m2e-wtp плагины. Это делается путем перехода к «Справка> Установить новое программное обеспечение ...», установив this URL для m2e и this URL для m2e-wtp, а затем установить каждое предлагаемое программное обеспечение (не забудьте перезагрузить Eclipse после этого).
  • Правильная настройка сервера в Eclipse: в представлении «Серверы» щелкните правой кнопкой мыши и выберите «Создать> Сервер», а затем выполните действия для вашего конкретного сервера; в конце концов, вам нужно будет добавить свой war через экран «Добавить и удалить ...».
  • очистка проекта в Eclipse, выбрав его и выбрав «Проект> Очистить».
  • обновление проекта Maven, щелкнув правой кнопкой мыши проект в Eclipse и выбрав «Maven> Update Project ...».
  • Очистка сервера, щелкнув правой кнопкой мыши на сервере и выбрав «Очистить» (это зависит от вашего сервера, но обычно есть опция «Очистить»).

Я рекомендую вам выполнить все эти шаги на новой установке Eclipse, чтобы избежать общих проблем с кешированием.

Как примечание стороны, есть несколько проблем с POM как есть:

  • javax.servlet:javax.servlet-api зависимости должна иметь provided сферу, поскольку эта зависимость всегда обеспечиваются веб-сервер во время выполнения.
  • javax.servlet:jstl зависимости, вероятно, не обязательно иметь область compile, и runtime будет достаточным.
  • Вы объявляете множество зависимостей Spring, когда вам это не нужно: они все равно будут включены, поскольку они уже являются транзитивными зависимостями других артефактов. Таким образом, вы можете удалить декларацию spring-aop, spring-beans, spring-context, spring-expression, spring-tx и spring-web.
  • Ваши зависимости тестирования не хватает test сферы (testng, mockito-all ...)
  • <inherited>true</inherited> не является необходимым в вашей maven-compiler-plugin декларации, как это the default.

Final 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> 

Другое соображение вы можете исправить это, что ваш groupId и artifactId не следуют конвенции Maven: предпочитают использовать - в качестве разделителя вместо ..

+0

Это был пресловутый ответ, который я не хотел слышать, но он сработал. –

+0

@AlexR Если это потому, что я предлагаю использовать последнее Eclipse, не бойтесь. Он также должен работать под Луной и, возможно, вам не нужно делать новую установку. Попробуйте сделать шаги в моем ответе на вашу текущую установку и посмотреть, работает ли она (особенно установка/обновление m2e и m2e-wtp). – Tunaki

+0

Луна уже была на моей третьей переустановке. Поэтому я пошел на новую установку Марса, и она была гладкой. –

1

Ваш Pom.xml, кажется, все в порядке. Однако, если вы щелкните правой кнопкой мыши на своем проекте, в разделе «maven» должна быть опция «включить управление зависимостями». Вот и все. PS: не используйте для этого maven-eclipse-plugin, если вы используете m2eclipse. В этом нет никакой необходимости, это будет путать, это породит беспорядок. Не используйте его, если вы действительно не знаете, что делаете.

Надеюсь, это поможет.

+0

Я не нашел «включить управление зависимостями». Я забыл упомянуть, что я все еще на Луне, возможно, это что-то новое на Марсе? –

+0

Я думаю, что он говорит о «Разрешить разрешение рабочей области». По умолчанию он должен быть включен. – Tunaki

0

Его довольно длинный список - для меня без установки m2e и m2e-wtp, «очистка проекта в Eclipse путем его выбора и перехода к« Project> Clean ». запускается сборка maven с выбранным профилем по умолчанию.

Смежные вопросы